Java14新特性
Java14已如期于2020年3月17日正式发布。这一个版本中主要带来了ZGC增强、instanceof增强,switch表达式 标准本、增强和新功能。
instanceof模式匹配(预览阶段)
- 对instanceof 进行改进,由原来的检查对象类型。变成了先对对象进行类型匹配,校验成功之后转换成 对应类型,然后再复制给局部变量,并且只有当模式匹配表达式匹配成功才会生效喝复制。局部变量只能在当前代码块使用
if (person instanceof Student student) { student.say(); // other student operations } else if (person instanceof Teacher teacher) { teacher.say(); // other teacher operations }
G1的NUMA可识别内存分配
- 改进非一致性系统内存访问的G1垃圾收集器整体性能,主要针对年轻代内存分配优化.
- 创建新对象->分配内存->存放内存(region)->(支持NUMA)分配当前线程NUMA节点空闲内存区。基于同一个对象创建调用频率较高,存活时间短(能够提高一些大型计算机的G1内存分配回收性能)
- 启动可识别内存分配
-XX:+UseNUMA
改进NullPointExceptions提示信息
改进空指针提示信息 帮助我们更加直观找到 Null变量
public static void main(String[] args) { String str=null; System.out.println(str.length()); } //Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.length()" because "str" is null at com.study.TestPros.main(TestPros.java:7)
Record类型(预览功能)
- Java14引入了record类型 支持更加紧凑的方式去声明一个类,而这些类能够作为不可变数据类型的封装持有者。
public class TestPros { public static void main(String[] args) { } public record person(String name, int age) { public String getName() { return this.name; } public int getAge() { return age; } } }
反编译结果
public class TestPros { public TestPros() { } public static void main(String[] args) { } public static record person(String name, int age) { public person(String name, int age) { this.name = name; this.age = age; } public String getName() { return this.name; } public int getAge() { return this.age; } public String name() { return this.name; } public int age() { return this.age; } } }
- 1个有参构造函数
- 获取属性值的方法
- 自定义的获取name和age方法
- 不能再record声明的类中定义示例字段,类也不能声明为抽象类
Java14引入了record类,所以在java.lang.Class引入了2个新方法
RecordComponent[] getRecordComponents() boolean isRecord()
Switch表达式正式版
switch表达式在Java14当中更新未正式版本,结束了在Java12 和Java13的预览版本。
注:
- 需要保持与之前 switch 语句同样的 case 分支情况
- 使用 yield 关键字来返回 case 分支需在 Java 14 表达式中,表达式默认执行完之后自动跳出,不会继续往后执行要返回的结果
- switch 表达式中不再需要显式地使用 return、break 或者 continue 来跳出当前分支
- 在 Java 14 表达式中,表达式默认执行完之后自动跳出,不会继续往后执行
- 相同的
case
方法块,可以将case
条件并列public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int day = scanner.nextInt(); int number = switch (day) { case 1, 2, 3 -> 10; case 5 -> 5; default -> 0; }; System.out.println(number); }
删除CMS垃圾回收器
- Java14 正式移除了CMS垃圾回收器
ZGC支持MacOS和Windows系统(实验阶段)
Java14在之前的Linux/x64增加了MacOS和windows系统,解决了开发人员你需要在桌面操作系统中使用ZGC问题。在MacOS和Windows下面开启ZGC的方式需要使用vm参数
-XX:+UnlockExperimentalVMOptions -XX:+UseZGC
启用ParallelScavenge和SeialOld GC的组合使用
1.年轻代当中使用并行算法、老年代使用串行算法,混搭使用,太过冒险。所以Java14考虑将这两GC的组合启用 采用如下参数 去弃用该组合参数
-XX:+UseParallelGC -XX:-UseParallelOldGC
文本块(第二预览版本)
- Java14 在13的基础上新增了 两个转义符 “\”和“\s"
- \行终止符
- \s 表示一个空格
stripIndent()
:用于从文本块中去除空白字符translateEscapes()
:用于翻译转义字符formatted(Object... args)
:用于格式化
网友评论