JDK17 新特性 Preview 2

接着上一篇 Preview 1,本文将继续介绍 JDK17 的新特性。

Record 类

“类似 lombok 的属性只读”。在 JDK 14 中,引入了 Record 类,可以用来创建只读的类,这样就不需要使用 lombok 来实现了。

1
2
public record Person(String name, int age) {
}

从上面的代码可以看出,Record 类的定义和普通类的定义很相似,只是在类名前面加上了 record 关键字。
Record 类的属性默认是 final 的,且只有 getter 方法,没有 setter 方法,所以 Record 类的属性是只读的。

优化空指针异常

在 JDK 17 中,对空指针异常进行了优化,当出现空指针异常时,会打印出更加详细的信息,包括:

  • 空指针异常的位置

  • 空指针异常的原因

  • 空指针异常的堆栈信息

1
2
3
4
5
6
public class NullPointerExceptionDemo {
public static void main(String[] args) {
String str = null;
System.out.println(str.length());
}
}

在 JDK 17 中,运行上面的代码,会打印出如下信息:

1
2
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.length()" because "str" is null
at com.example.demo.NullPointerExceptionDemo.main(NullPointerExceptionDemo.java:5)

可以看出,JDK 17 对空指针异常进行了优化,打印出了更加详细的信息。

ZGC垃圾回收器

在 JDK 17 中,引入了 ZGC 垃圾回收器,ZGC 垃圾回收器是一种低延迟的垃圾回收器,可以在几毫秒内处理几个字节到几个TB的堆。
ZGC 垃圾回收器的特点:

  • 低延迟

  • 可以处理几个字节到几个TB的堆

  • 与应用程序线程并发执行

  • 不卡顿

使用 ZGC 垃圾回收器:

1
java -XX:+UseZGC

在 JVM 启动时,使用 -XX:+UseZGC 参数,就可以使用 ZGC 垃圾回收器。