2020年3月17日,Oracle公司正式发布了JDK14。共新增了16项新特性。
新的语言特性
新的语言特性有7项,包括3项正式特性与4项非正式特性。
switch表达式(JEP361)
友好的空指针异常(JEP358)
早期的JDK运行后提示空指针异常:java.lang.NullPointerException at Test02NullPointerException .main( Test02NullPointerException .java:7)
无法确定是到底car为空还是engine为空
在JDK14版本中,开启参数
-XX:ShowCodeDetailsInExceptionMessages
可以更好的指定哪个底放出现异常
非易失性映射字节缓冲区(JEP352)
在JDK14中,新增了特地给JDK的文件映射模式,可以使用FileChannel创建引用非易失性存储器的MappedByteBuffer。
record(JEP359)
record提供了一种紧凑的语法来声明类,这是Preview预览功能。
record可以看作是一种新的类型,类似于枚举,只需要使用record定义名称及它的属性即可,如:
record Person(String name,int age){}
系统会自动生成Person的标准的成员:
Person 中每个属性都定义为private final 修饰的字段。
每个属性都提供公共的getter方法。
有一个公共构造方法,构造方法签名与声明相同,即 Person(String name,int age)
会生成equals()/hashCode()方法的实现
会生成toString()方法的重写
注意:record 不能继承,record类隐含是final类即也不能被继承。
编译:java -enable-preview -source 14 类名.java
运行:java -enable-preview 类名
instanceof模式匹配(JEP305)
在JDK14中,通过对instanceof运算符进行模式匹配来增强java语言,这是Preview预览功能。
文本块(JEP368)
在JDK13中引入了文本块的预览,在JDK14中进行二次预览,为了更方便的对HTML,XML,JSON,SQL这些字符串进行更好的阅读和维护。
外部存储器API(JEP370)
外部存储器API主要包含三个类:
MemorySegment
MemoryAddress
MemoryLayout
该功能是作为孵化器模块引入的,为了让更多的Java社区的人员参与测试与反馈。
垃圾回收修改
G1的NUMA内存分配优化(JEP345)
non-uniform memory access 非统一的内存访问
JFR事件流(JEP349)
JDK flight Recorder
移除CMS垃圾收集器(JEP363)
弃用Parallel Scavenge和Serial Old垃圾收集算法(JEP366)
MacOS系统上的ZGC实验(JEP364)
Windows系统上的ZGC实验(JEP365)
移除包和功能
弃用Solaris和SPARC端口(JEP362)
移除Pack200(JEP367)
添加了一些工具
打包工具(JEP343)
想创建一个用于打包的独立的java工具,处于孵化阶段。