JDK 14于2020年3月17日发布了通用版本,Oracle的JDK/Java 14 正式 GA(General Available)。这是自从Java采用六个月一次的发布周期之后的第五次发布。
本版本总共包含如下的16个新特性:
1.JEP 305:instanceof的模式匹配(预览)
2.JEP 343:打包工具(孵化器模块)
3.JEP 345:G1的NUMA-Aware的内存分配
4.JEP 349:JFR事件流
5.JEP 352:非易失性Mapped Byte Buffers
6.JEP 358:非常实用的NullPointerException
7.JEP 359:Record(预览特性)
8.JEP 361:switch表达式(正式版)
9.JEP 362:弃用Solaris和SPARC的移植
10.JEP 363:删除CMS(即:Concurrent Mark Sweep)GC
11.JEP 364:macOS上的ZGC
12.JEP 365:Windows上的ZGC
13.JEP 366:弃用ParallelScavenge和SerialOld GC组合
14.JEP 367:删除Pack200工具和API
15.JEP 368:文本块(预览第二版)
16.JEP 370:外部内存访问API
简言之,代码更加简洁明快。其中,超实用的语法功能有:
instanceof模式匹配、Record、switch表达式、文本块和NullPointerException的提示功能。
一、增强 switch case 代码块
右箭头 ->替代冒号,支持判断合并
private static void switchCase() {
String day = "1";
switch (day) {
case "周一", "周二" -> System.out.println("这里是周一和周二");
case "周三" -> System.out.println("这里是周三");
case "周四" -> System.out.println("这里是周四");
default -> System.out.println("这里是周五六日");
}
boolean isWorkday = switch (day) {
case "周六", "周日" -> false;
default -> {
yield isWeekend(day);
}
};
if (isWorkday) {
System.out.println("isWorkday 不是 周六 周日");
}else{
System.out.println("isworkday is false!");
}
}
private static boolean isWeekend(String day) {
if(day.equals("1")){
return false;
}
return true;
}
二、新增关键字 record(构造函数)
通过关键字record,替代创建类,写get,set,equals,hashcode等方法
public record Range(String name, int age) {}
三、增强NPE NullPointerException 错误定位
在多层级下,指出具体哪个对象取数据时为null