theme: orange
Java8于2014年3月18日发布,截止到2022年4月6日,当前最新发行版本是Java18。版本17、11和8是目前支持的长期支持(LTS)版本。这篇文章带领大家回顾从Java 8 开始每个版本的特性,小板凳坐好,发车了!
Java 14 新特性
Records
Records是一种受限制的类形式,对于 pojo 来说非常理想。标准的数据载体类将有一些私有字段以及构造函数和 getter/setter。
让我们使用Java 8 语法创建一个有两个成员的简单数据载体类的示例:
public class Location { double x; double y; public Location(double x, double y) { this.x = x; this.y = y; } public double getX() { return x; } public double getY() { return y; } }
我们可以使用下面给出的代码使用 Record 重写上面的类:
record NewLocation(double x, double y) {}
Record 将在运行时获取 getter 和构造函数,还将获取 equals ()、 hashcode ()和 toString ()方法。
Helpful Nullpointerexception
在此之前,NullPointerException 的堆栈跟踪没有太多内容可讲,除了给定文件中某一行的某个值为 null。
虽然这些信息很有用,但是它们只是建议调试一行代码,而不是仅仅通过查看日志供开发人员理解。
现在,Java 通过添加指出给定代码行中到底什么是 null 的功能,使得这一过程变得更加容易。
举个空指针的例子:
int[] arr = null; arr[0] = 1;
在以前的版本,运行这段代码时,日志会显示:
Exception in thread "main" java.lang.NullPointerException at com.baeldung.MyClass.main(MyClass.java:27)
但对于Java 14,日志会打印:
java.lang.NullPointerException: Cannot store to int array because "a" is null
正如我们可以看到的,现在我们准确地知道是哪个变量导致了异常。
Text Blocks
文本块相较于Java 13,又做了一次升级,现在有了两个新的转义序列,但仍然是预览功能。
- \: 表示行尾,以便不引入新的行字符
- \s: 表示一个单独的空格
举个例子:
String multiline = "A quick brown fox jumps over a lazy dog; the lazy dog howls loudly.";
现在可以写成:
String multiline = """ A quick brown fox jumps over a lazy dog; \ the lazy dog howls loudly.""";
这提高了字符串的可读性。
当然还有其它的新特性,包括但不限于:
- Packaging Tool
- Foreign Memory Access API
- ZGC on Windows
- NUMA-Aware Memory Allocation for G1
- JFR Event Streaming