JAVA 5
1、泛型:类和方法声明上支持泛型
a、编译时的泛型擦除:转换为一个对应的原生类型,泛型类型为第一个限定泛型类型或没有限定时为Object;
b、在变参方法调用中,若没有明确指定泛型类型(instance.<T>method(...)),变参也不能明确确定一个类型时,将自动向上转型为共同的父类,若共同父类有多个,则报错;
c、编译时期强制类型转换:在必要时进行强制类型转换;
2、for...in语句
3、变参
4、枚举(线程安全的单列模式)
5、基础类型的自动拆箱装箱(byte、shot、int、long、float、double、char、boolean)
6、java.util.current包下新增的线程模型和并发库
7、注解
8、静态导入
JAVA 6
1、集合增强
a、增加了新的类和接口,以增强双向集合操作;
b、新增数组操作方法:Arrays.copyOf、Arrays.copyOfRange
2、脚本引擎(JavaScript)
3、JDBC4.0规范
JAVA 7
1、数字型整型字面量可直接用二进制表示,0b或0B开头
2、数字型整型字面量可用_分割,提高可读性,_不可出现在开头或末尾
3、try-with-resources:实现了java.lang.AutoCloseable接口的类实例,可直接在try中声明,省略finally的close操作
4、catch语句可同时捕获多个异常,用|分割
5、swith支持String
6、泛型实例声明自动类型推断
JAVA 8
一、语言特性
1、lambda表达式:由逗号分割的参数列表,->符号以及语句块组成。
a、参数列表可加类型限定或由jvm推导类型;
b、可以有返回值,若语句块只有一条语句,则可以不显示写return语句,该语句执行结果则为返回值;
c、lambda表达式可使用类成员变量和局部变量;
d、函数式接口(只有一个函数的接口)和lambda的自动转换;
e、函数式接口可以用@FunctionalInterface注解标记,默认方法和静态方法不会破坏函数式接口;
2、接口提供了默认方法和静态方法的支持
3、方法引用
a、构造器引用:Class<T>::new
b、静态方法引用:Class<T>::static_method
c、类成员方法引用:Class<T>::method
d、实例对象的成员方法引用:instance::method
4、重复注解:允许在同一个地方多次使用同一个注解
5、更好的类型推断
6、更广泛的注解使用场景
二、JAVA编译器新特性
1、参数名称:通过添加-parameters可以开启参数名称编译到字节码中;
三、JAVA官方库新特性
1、Optional:空值检查处理
isPresent()方法:如果Optional实例持有一个非空值,则方法返回true,否则返回false;
orElseGet()方法,Optional实例持有null,则可以接受一个lambda表达式生成的默认值;
map()方法可以将现有的Opetional实例的值转换成新的值;
orElse()方法与orElseGet()方法类似,但是在持有null的时候返回传入的默认值。
2、Streams:简化集合操作
stream之上的操作可分为中间操作和晚期操作
中间操作会创建一个新的stream,并将符合条件或转换后的元素放入该stream中;
晚期操作将立刻遍历stream并得出结果,晚期操作后stream处理完毕,不能再使用;
stream支持并行处理、统计等复杂操作;
3、Date/Time API
4、Nashorn JavaScript引擎
5、Base 64编解码原生API支持
6、并行数组操作:Arrays.parallelXxx
7、并发性的丰富扩展
ConcurrentHashMap、ConcurrentForkJoinPool新增接口方法
StampedLock
atomic新增工具类
JVM新特性:使用Metaspace代替PermGen Space
参考:
https://my.oschina.net/rechardchensir/blog/1931991
https://winterbe.com/posts/2014/03/16/java-8-tutorial/
https://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples/