JAVA 9
1、接口新增了私有方法、私有静态方法,用于接口内重复代码封装利用;
2、增强了try-resource,可直接在try(Resource resource){} 中管理资源;
3、JShell,交互式命令行,就是打开一个交互界面,在界面上写一些代码,然后回车直接运行;
JAVA 10
1、局部变量的类型推断 var关键字。只能使用在:局部变量初始化、for循环内部索引变量、传统的for循环声明变量;
2、Collectors收集器,新增4个方法:
toUnmodifiableList()、toUnmodifiableSet()、toUnmodifiableMap(Function, Function)、toUnmodifiableMap(Function, Function, BinaryOperator)、
这四个新方法都返回 Collectors ,将输入元素聚集到适当的不可修改的集合中。
JAVA 11(LTS)
1、java.net.http 升级。支持【异步非阻塞】请求;
2、在 Lambda 表达式中使用局部变量类型 var。使用限制:
只能用于局部变量上、声明时必须初始化、不能用作方法参数、不能在 Lambda 表达式中使用;
3、低开销的 Heap Profiling。使用该工具可以得到问题代码的位置;
4、ZGC:可伸缩低延迟垃圾收集器。必须显示指定使用:
-XX:+ UnlockExperimentalVMOptions -XX:+ UseZGC -Xmx10g
-Xmx10g是必须要设置一个最大堆的大小
JAVA 12
1、Switch 表达式写法优化,标签右侧的代码段只能是表达式、代码块或 throw 语句;
int dayNumber = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
case THURSDAY, SATURDAY -> 8;
case WEDNESDAY -> 9;
default -> throw new IllegalStateException("Huh? " + day);
}
2、Shenandoah是一种垃圾收集(GC)算法,旨在保证低延迟(10 - 500 ms的下限);
JAVA 13
1、Java Socket API(java.net.ServerSocket 和 java.net.Socket)重构;
2、Switch 表达式扩展(预览功能),可将JAVA 12 的 Switch 语句进行如下改写:
int dayNumber = switch (day) {
case MONDAY, FRIDAY, SUNDAY:
yield 6;
case TUESDAY:
yield 7;
case THURSDAY, SATURDAY:
yield 8;
case WEDNESDAY:
yield 9;
default:
yield -1;
}
3、文本块(预览功能),文本块以三重双引号开头,并以同样的以三重双引号结尾终止,它们之间的任何内容都被解释为字符串的一部分,包括换行符。
JAVA 14(LTS)
待补充。