甲骨文发布Java 18,聚焦9个JEP特性且节奏略慢,本文介绍新特性
甲骨文发布了 Java 编程语言以及虚拟机的第 18 版。这个版本的最终特性主要集中在以下这些方面:有 9 个 JEP;这些 JEP 具有相关特性。

Java 18 的特性节奏相较于之前的版本稍慢一些。Java 17 带有 14 个特性;Java 16 带有 17 个特性;Java 15 带有 14 个特性;Java 14 带有 16 个特性。
这个版本的 JEP 特性对 Amber 项目、Loom 项目和 Panama 项目持续作出贡献,还提供了一些有用的新工具。本文将介绍其中的一些新特性。
Panama 项目
JEP 417 得到了 Panama 项目的赞助,JEP 419 也由 Panama 项目赞助。Panama 项目的目的是对 JVM 进行改进并且使其与定义良好的“外部”(也就是非 Java)API 之间的互操作性更加丰富。这些 API 很有可能会包含 C 语言库中经常使用的接口。
JEP 417,即 Vector API(处于第三个孵化阶段),除了有性能的改进之外,还针对 JEP 414(Vector API 的第二个孵化阶段)以及 JEP 338(Vector API 的孵化阶段)这前两个孵化阶段的反馈进行了增强。JEP 338 在 JDK 16 中处于孵化阶段并被集成其中,JEP 414 被确定为 JDK 17 的最终 JEP 之一。
JEP 419,外部函数和内存 API(处于第二个孵化阶段)依据 Java 社区的反馈(JEP 412,外部函数和内存 API(处于孵化阶段),此 JEP 在 JDK 17 中完成交付)进行了优化和提升。还有新的用于内存段之间复制 Java 数组的 API。
Loom 项目
Loom 项目赞助了 JEP 418,这个项目的目的是去探索、孵化并交付 Java 虚拟机(JVM)的特性和 API,目的是为了支持那种容易使用且高吞吐量的新型轻量级并发编程模型。而这将会通过虚拟线程、定界延续以及尾调用来达成。
JEP 418 即网络地址解析 SPI,它为主机名和地址解析定义了一个服务提供者接口。这样一来,java.net.InetAddress 就能够利用除默认内置 OpenJDK 解析器之外的其他解析器。
Amber 项目
Amber 项目赞助了 JEP 420,这个项目的目的是探索并孵化一些更小的 Java 语言特性,从而提升生产率。
JEP 420,即 Switch 的模式匹配(第二版预览),能够针对多个模式对目标 switch 表达式进行测试。每个模式都具备特定的操作,借此可以简洁且安全地表达复杂的面向数据的查询。此为在 JDK 17 中交付的 JEP 406,Switch 的模式匹配(预览版)之后的第二个预览版本。增强功能包含以下内容:对支配性检查进行了改进,强制在同一类型的受保护模式之前必须出现一个常量的 case 标签;与密封的层次结构相比较而言,如今对 switch 块的检查更加精准了。
Java 工具
JEP 413 能够在 Java API 文档里加入代码片段。它为 Oracle 的标准 Doclet 引入了 @snippet 标记,此标记是知名的 Java API 文档实用程序,能够生成默认 HTML 格式的输出。其主要目的是把 API 文档中包含的示例源代码进行简化。代码片段可以是内联的,同时也可以是外部的。以下这两个示例将会对此进行说明:
在以下内联的示例里,源代码被添加到了用大括号括起来且位于@“snippet”标记前面的注释中。
/**
以下代码展示了怎样去使用 {@code Optional.isPresent}:
* {@snippet :
* if (v.isPresent()) {
* }
* }
*/
复制代码
在下面的外部示例里,现有的源文件 ShowOptional.java 带有 @start 和 @end 标记。已明确的区域,也就是 region="example" ,在注释以及源文件中都被提及到。
/**
* 下面的代码展示了如何使用 {@code Optional.isPresent}:
以下是对该句子的改写:在 ShowOptional.java 文件的 example 区域内的内容。
*/
public class ShowOptional {
void show(Optional v) {
// @start region="example"
if (v.isPresent()) {
}
// @end
}
}
复制代码
JEP 408 是简单 Web 服务器,它提供了一个简易的 HTTP 命令行 Web 服务器,并且只提供静态文件。这个实用程序是为了用于原型设计、临时编码和测试而设计的,尤其在教育场景中。服务器的启动方式如下:
可以设置输出级别为 none|default|verbose [-o none|default|verbose]
复制代码
Java 19
目前,在 Java 19 当中,仅有一个处于 Targeted 或者 Integrated 状态的 JEP 。
Java 19 的正式发布日期尚未明确。依据 6 个月的发布周期来推算,预计会在 2022 年 9 月中旬发布。开发人员预计在 2022 年 6 月中旬进行特性冻结。
Java 18 现在能够从 Oracle 进行下载了。并且,其他供应商的二进制文件预计在往后的几天内会被提供。
原文链接: