整体情况
a.随着大数据的兴起,函数式编程在处理大数据上的优势开始体现,引入了Lambada函数式编程
b.使用Stream彻底改变了集合使用方式:只关注结果,不关心过程
c.新的客户端图形化工具界面库:JavaFX
d.良好设计的日期/时间API
e.增强的并发/并行API
f.Java与JS交互引擎 -nashorn
具体如下:
1、JVM
使用元空间(Mataspace)代替永久代(PermGen space)
在JVM参数方面,使用-XX:MetaSpaceSize和-XX:MaxMetaspaceSize代替原来的-XX:PermSize和-XX:MaxPermSize。
2、新的命令行工具
jjs:一个基于标准Nashorn引擎的命令行工具,可以接受js源码并执行
jdeps:可以展示包层级和类层级的Java类依赖关系,它以.class文件、目录或者Jar文件为输入,然后会把依赖关系输出到控制台
3、新的工具类
Optional:用来解决空指针异常
Streams:将函数式编程引入Java,支持串行和并行处理
final long totalPointsOfOpenTasks = tasks
.stream()
.filter( task -> task.getStatus() == Status.OPEN )
.mapToInt( Task::getPoints )
.sum();
Date/Time API
JavaScript引擎:使得可以在JVM上开发和运行js
Base64:编解码
并行数组:新增很多以parallelXX()方法,用于支持并行处理数组
并发性
4、Java编译器
从语言层面和字节码层面都支持获取运行时方法参数的名称
5、语言
Lambda表达式和函数式接口
Lambda表达式:即闭包,允许将函数当成参数传递给某个方法或把代码本身当作数据处理
Arrays.asList( "a", "b", "d" ).forEach( e -> System.out.println( e ) );
函数式接口:只有一个方法的接口(需要带有@FunctionalInterface),可以隐式的转换为Lambda表达式
注意:函数式接口可以有默认和静态方法
接口的默认方法和静态方法:默认方法允许在不破坏二进制兼容性的前提下可以给现存接口添加新的方法
方法引用:使得开发者可以直接引用现存的方法、构造方法或实例对象
重复注解:允许在同一地方多次使用同一注解,需要用@Repeatable定义注解
更好的类型推断
拓宽注解的应用场景