一、JDK1.5新特性

  1.泛型:泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。可以在编译的时候就能发现一些参数类型导致的异常。

  2.自动拆箱和装箱:

    Java为我们提供了8中基本类型的数据,但是有时候我们需要传入的是对象如集合中加入数字,这就需要包装类型。所以Java为每种基本数据类型都提供了对应的包装器类型,Byte、Short、Integer、Long、Float、Double、Character、Boolean。

    所谓的拆箱就是自动从包装类型变为基本数据类型,装箱就是自动从基本数据类型转为包装类型。

    装箱过程是通过调用包装器的valueOf方法实现的,而拆箱过程是通过调用包装器的 xxxValue方法实现的。(xxx代表对应的基本数据类型)。如装箱Integer a = Integer.valueOf(1),拆箱int b = a.intValue();

    

public static void main(String[] args) {
Integer a = new Integer(127);
Integer b = new Integer(127);
int c = 127;
Integer d = 127;
Integer e = 127;
Integer f = 128;
Integer g = 128;
int h =128;
System.out.println((a == b) +" "+ (a.equals(b)));//false true
System.out.println((a == c)); //true
System.out.println((a == d) +" "+ (a.equals(d)));//false true
System.out.println((c == d)); //true
System.out.println((d == e) +" "+ (d.equals(e)));//true true
System.out.println((f == g) +" "+ (f.equals(g)));//false true
System.out.println((g == h)); //true
//Byte,Short,Integer,Long都是有默认缓存的-128到127的数字,所以在比较这个区间的数据的地址时,是相同的。
//equals方法会将这些数据转换到基本类型然后再比较
//包装类型和基本数据类型 == 比较时会先拆箱然后比较 Character c1 = 'a';
Character c2 = 'a';
Character c3 = new Character('a');
char c4 = 'a';
System.out.println(c1 == c2);//true
System.out.println(c1 == c3);//false
System.out.println(c3 == c4);//true }

  3.枚举:可以说是一类有限事物的集合,将有限的事务放在一起,列举出来。

    

public enum Season {

    SPRING("春"),
SUMMER("夏"),
AUTUMN("秋"),
WINTER("冬"); private String value; private Season(String value){
this.value = value;
} public String getValue() {
return value;
} }
    public static void main(String[] args) {
Season spring = Season.SPRING;
Season spring2 = Season.SPRING;
Season summer = Season.SUMMER;
System.out.println(spring == spring2);//true 单例的一种实现方法
System.out.println(spring == summer);
System.out.println(Season.SPRING.getValue());//春 }

  4.增强for循环(foreach)  

    public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
for(String item : list){
System.out.println(item);
}
}

  5.静态导入 :要使用静态成员(方法和变量)我们必须给出提供这个静态成员的类,使用静态导入可以使被导入类的静态变量和静态方法在当前类直接可见,使用这些静态成员无需再给出他们的类名。

public class StateCode {

    public static int normal = 1;
public static int error = 2; public static void getState(){
System.out.println("this is state code");
}
}
public class Test {

    public static void main(String[] args) {
System.out.println(normal);
getState();
} }

  6.内省 :通过反射来实现,主要是获取并操作对象的属性的getter和setter方法,达到在运行过程中操作对象的目的。其底层还是通过反射来实现的。

  

package jdk5;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.MethodDescriptor;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method; public class Test { public static void main(String[] args) throws Exception {
User user = new User();
PropertyDescriptor propertyDescriptor = new PropertyDescriptor("name",User.class);
//获取属性的写的方法。
Method writeMethod = propertyDescriptor.getWriteMethod();
//获取属性的读方法。
Method readMethod = propertyDescriptor.getReadMethod();
propertyDescriptor.getReadMethod();
writeMethod.invoke(user, "kyle");
System.out.println(readMethod.invoke(user, null)); BeanInfo beanInfo=Introspector.getBeanInfo(User.class); //获取所有的方法
MethodDescriptor[] methodDescriptors = beanInfo.getMethodDescriptors();
for(MethodDescriptor methodDescriptor : methodDescriptors){
System.out.println(methodDescriptor.getName());
} //获取所有的属性
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for(PropertyDescriptor pd : propertyDescriptors){
System.out.println(pd.getName());
}
} }

  7.可变参数:可变参数其实就是一个数组

  

public class Test {

    public static void main(String[] args) throws Exception {
System.out.println(add(1,2,3));
System.out.println(add(1,2,3,4));
} public static int add(int a, int... b){
int result = a;
for(int temp : b){
result += temp;
}
return result;
} }

  8.线程池

    Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利。为了编写高效稳定可靠的多线程程序,线程部分的新增内容显得尤为重要。

二、JDK1.6新特性

  1.Desktop类和SystemTray类

  2.使用JAXB2来实现对象与XML之间的映射

  3.理解StAX

  4.使用Compiler API

  5.轻量级Http Server API

  6.插入式注解处理API(Pluggable Annotation Processing API)

  7.用Console开发控制台程序

  8.对脚本语言的支持如: ruby, groovy, javascript.

  9.Common Annotations

三、JDK1.7新特性

  1.switch中可以使用字串了

    

public class Test {

    public static void main(String[] args) throws Exception {
String season ="summer";
String result = "";
switch (season){
case "spring":
result = "春";
break;
case "summer":
result = "夏";
break;
case "autumn":
result = "秋";
break;
case "winter":
result = "冬";
break;
default :
result = "输入有误";
} System.out.println(result);
}
}

  2.泛型实例化类型自动推断

  

public class Test {

    public static void main(String[] args) throws Exception {
List<String> list = new ArrayList<>();
list.add("a");
System.out.println(list.get(0));
}
}

  

  3.支持数字用下划线分隔提升可读性

public static void main(String[] args) throws Exception {
int num = 21_112_123;
System.out.println(num);//
}

  

  4.支持二进制数字

public static void main(String[] args) throws Exception {
int num = 0b10001;
System.out.println(num);//
}

  

  5.自动资源管理

    

public class Test {

    public static void main(String[] args) {
String src = "D:/logs/log.log";
String ds = "D:/logs/log2.log";
try (InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(ds)) {
byte[] buf = new byte[8192];
int n;
while ((n = in.read(buf)) >= 0)
out.write(buf, 0, n);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

四、JDK1.8特性

  1.接口的默认方法 :java8允许接口有一个默认的非抽象方法,所有实现该接口的类可以直接调用该方法。

public interface AbstractInterface {

    default void sayHello() {
System.out.println("hello");
} }
public class MyClass implements AbstractInterface{

    public static void main(String[] args) {
new MyClass().sayHello();//hello
}
}

  2. Lambda 表达式

    

 public static void main(String[] args) {
List<String> names = new ArrayList<>();
names.add("kyle");
names.add("stan");
names.add("eric");
names.add("kenny"); System.out.println(names);//[kyle, stan, eric, kenny] //Lambda 表达式
Collections.sort(names, (String a, String b) -> {
return b.compareTo(a);
}); System.out.println(names);//[stan, kyle, kenny, eric] }

  3.函数式接口

  4.Date API

  5.多重注解

JDK1.5以后的版本特性的更多相关文章

  1. 黑马程序员_Java基础:JDK1.5后的新特性:自动拆装箱,以及注意事项

    ------- android培训.java培训.期待与您交流! ---------- 首先来看一段代码: Integer x = new Integer(4); Integer y = 4; 在JD ...

  2. 总结:JDK1.5-JDK1.8各个新特性

    JDK1.5-JDK1.8各个新特性 JDK各个版本的新特性 要了解一门语言,最好的方式就是要能从基础的版本进行了解,升级的过程,以及升级的新特性,这样才能循序渐进的学好一门语言.以下介绍一下JDK1 ...

  3. Android各版本特性

    此篇文章可以利用碎片化时间进行消化和了解,针对Android各个版本特性,并没有把所有列出,只是抽出了比较常用重要的特性作为提示,同时在面试中只要牢记重要的几个点即可,其他特性直接查找官方文档即可. ...

  4. 为什么说JAVA中要慎重使用继承 C# 语言历史版本特性(C# 1.0到C# 8.0汇总) SQL Server事务 事务日志 SQL Server 锁详解 软件架构之 23种设计模式 Oracle与Sqlserver:Order by NULL值介绍 asp.net MVC漏油配置总结

    为什么说JAVA中要慎重使用继承   这篇文章的主题并非鼓励不使用继承,而是仅从使用继承带来的问题出发,讨论继承机制不太好的地方,从而在使用时慎重选择,避开可能遇到的坑. JAVA中使用到继承就会有两 ...

  5. C# 语言历史版本特性(C# 1.0到C# 7.1汇总更新) C#各版本新特性 C#版本和.NET版本以及VS版本的对应关系

    C# 语言历史版本特性(C# 1.0到C# 7.1汇总更新) 2017年08月06日 11:53:13 阅读数:6705 历史版本 C#作为微软2000年以后.NET平台开发的当家语言,发展至今具有1 ...

  6. [转帖]sql server版本特性简介、版本介绍简介

    sql server版本特性简介.版本介绍简介 https://www.cnblogs.com/gered/p/10986240.html 目录 1.1.sql server的版本信息 1.2.版本重 ...

  7. [转]【JVM】调优笔记2-----JVM在JDK1.8以后的新特性以及VisualVM的安装使用

    [From]https://www.cnblogs.com/sxdcgaq8080/p/7156227.html               隔壁的,加个引用做书签! [JVM]调优笔记2-----J ...

  8. Python 如何移除旧的版本特性,如何迎接新的特性?

    2020 年 4 月 20 日,Python 2 的最后一个版本 2.7.18 发布了,这意味着 Python 2 是真正的 EOL(end of life)了,一个时代终于落幕了. Python 2 ...

  9. Java14版本特性【一文了解】

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

随机推荐

  1. Linux下tomcat中多项目配置druid报错的问题

    这里有多种方法,推荐修改tomcat配置,即在启动JVM配置中设置如下: -Ddruid.registerToSysProperty=true 详解参见该博: https://blog.csdn.ne ...

  2. BZOJ4482[Jsoi2015]套娃——贪心+set

    题目描述 [故事背景] 刚从俄罗斯旅游回来的JYY买了很多很多好看的套娃作为纪念品!比如右 图就是一套他最喜欢的套娃J.JYY由于太过激动,把所有的套娃全 部都打开了.而由于很多套娃长得过于相像,JY ...

  3. ALGO-19 审美课

      算法训练 审美课   时间限制:1.0s   内存限制:256.0MB      问题描述 <审美的历程>课上有n位学生,帅老师展示了m幅画,其中有些是梵高的作品,另外的都出自五岁小朋 ...

  4. Quartus prime 16.0 中通过JTAG固化程序

    前言 下载项目sof文件到开发板中,掉电后会消失:由于开发板有JTAG口,则可以用JTAG固化jic文件到EPCS16芯片中. 流程 1.打开quartus软件并打开convert programmi ...

  5. 【XSY2470】lcm 数学

    题目大意 \(t\)组询问, 每组询问给定\(n\),求\(\sum_{k=1}^n[n,k]\),其中\([a,b]\)表示\(a\)和\(b\)的最小公倍数 . \(t\leq 300000,n\ ...

  6. 牛客小白月赛12 H(dfs序+线段树),F(分块思想+bit),J(二分)

    H 华华和月月种树 链接:https://ac.nowcoder.com/acm/contest/392/H 思路:先得到整棵树最终的形态,在这棵树上进行三种操作,用dfs跑下,第二种操作就直接对最终 ...

  7. MT【251】椭圆中的好题

    已知直线$l:x+y-\sqrt{3}=0$过椭圆$E:\dfrac{x^2}{a^2}+\dfrac{y^2}{b^2}=1,(a>b>0)$的右焦点且与椭圆$E$交于$A,B$两点,$ ...

  8. windows 服务器同步互联网时间

    @echo off ::netsh ipsec static set policy name=7road assign=n net time /setsntp:pool.ntp.org net sto ...

  9. P3613 睡觉困难综合征(LCT + 位运算)

    题意 NOI2014 起床困难综合症 放在树上,加上单点修改与链上查询. 题解 类似于原题,我们只需要求出 \(0\) 和 \(2^{k - 1} - 1\) 走过这条链会变成什么值,就能确定每一位为 ...

  10. Chinese Mahjong UVA - 11210 (DFS)

    先记录下每一种麻将出现的次数,然后枚举每一种可能得到的麻将,对于这个新的麻将牌,去判断可不可能胡,如果可以胡,就可以把这张牌输出出来. 因为eye只能有一张,所以这个是最好枚举的,就枚举每张牌成为ey ...