OpenJDK 23 将于 2024 年 9 月 17 号正式发布。目前 JDK 23 处于 Rampdown Phase One 阶段。在这个阶段,JDK 23 的功能集已经被冻结,不再添加新的 JEP。GitHub 上已经创建了 JDK 23 的分支,接受 bug 修复。JDK 23 的 Early-Access 版本也已经提供了下载。
下面介绍一下 JDK 23 中的新特性。作为一个非 LTS 版本,JDK 23 中的功能以预览功能为主,只有少量正式功能。完整的 JEP 列表见下图。
首先介绍 JDK 23 中新增的功能。
第一个是在模式匹配中使用 Java 的基本类型,允许基本类型出现在全部的模式上下文中,包括类型模式,instanceof 和 switch 中。这是一个预览功能。
下面是一些代码示例。
基本类型作为类型模式出现在 instanceof 中。
if (i instanceof byte b) {
}
在 switch 中使用 long、float 和 boolean 类型。
long v = ...;
switch (v) {
case 1L -> ...;
case 2L -> ...;
case 10_000_000_000L -> ...;
case 20_000_000_000L -> ...;
case long x -> ... x ...;
}
float v = ...
switch (v) {
case 0f -> 5f;
case float x when x == 1f -> 6f + x;
case float x -> 7f + x;
}
boolean v = ...
switch (v) {
case true -> ...
case false -> ...
}
第二个是使用Markdown编写JavaDoc的文档注释。目前在编写Java的文档注释时,只能使用 HTML 和 JavaDoc 内置的标签。如果文档有复杂的格式化需求,包含代码、列表和表格,使用 HTML 和 JavaDoc 标签来编写会很繁琐。
Markdown 使用简单的语法来编写格式化的文档,可以转换成 HTML 格式。Markdown的语法简单易懂,很多人都会写 Markdown 文档。使用 Markdown 编写 Java 文档更加简单。
下面是 Java 中 Object 类的 hashCode 方法的注释,使用的是旧的语法。
改成使用 Markdown之后的注释如下所示。Markdown 注释以三个斜杠作为起始。
第三个是废弃 Unsafe 类中与内存访问相关的方法,并计划在后续 JDK 版本中移除。Unsafe类一般用在库中,对于应用开发的影响很小。不过 Unsafe 在库中的使用非常多,JDK 23 只是废弃,离正式删除 Unsafe 中的相关方法,还有很长的一段时间。
第四个是模块导入声明,可以导入一个模块所导出的全部包。这是一个预览功能。使用 import module 来导入一个模块。导入一个模块,会自动导入该模块所导出的全部公开的类和接口,同时也会导入该模块所传递依赖的其他模块。
import module java.base;
第五个是默认启用垃圾回收器 ZGC 的分代模式,同时废弃非分代模式。
除了这5个全新的功能之外,还有几个继续预览的功能。
Class File API,这是解析、生成和转换 Java 类文件的标准 API。
流收集器,允许创建自定义的流中间处理操作。
隐式声明的类和实例 main 方法,这个功能简化了Java入口类的写法。
灵活的构造器内容,构造器的 super 和 this 之前可以添加语句。
结构化并发和 Scoped Values 这两个功能在 JDK 23 中继续预览。
最后的最后,是从 Java 16 以来的钉子户,矢量 API,在 JDK 23 中已经来到了第8个孵化版本
以上就是 Java 23 的全部新功能了。