Java 17 特性与示例

2025 年 3 月 19 日 | 4 分钟阅读

Java SE 平台的最新长期支持版本是 Java 17 LTS。根据 Oracle 的“无费用条款和条件许可证”,JDK 17 二进制文件可免费用于生产和再分发,无需支付任何费用。 LTS 代表长期支持。它将于 2021 年 9 月 15 日发布。

现在可以使用 JDK17 的开放 LTS 版本来创建 Web 和桌面应用程序。它包括开发工具、一组库、一个 Java 虚拟机和其他文件。在每个版本中,我们都会观察到新功能,同时关注其中一些功能的变化或删除。如果没有单调的视角和定期发布,需要时间来熟悉并掌握新版本的功能。

JDK17 新功能的介绍

我们所有人都在为这个版本中的重大变化而疯狂,以促进工作流程。但是,开发人员应该会感到不满,因为没有这种大的发布升级版本检查,正如我们在 JDK 改进提案(通常称为 JEPS)中所观察到的,如下所示

  • 恢复或重建“始终严格的浮点数”语义
  • 增强了“伪随机”数生成器
  • 新的 macOS 渲染管道
  • macOS/AArch64 端口
  • 删除 Applet API 以供移除
  • JDK 内部封装性增强
  • Switch 模式匹配(预览)
  • 激活 RMI 的移除
  • 生成密封类
  • 删除实验性的 AOT 和 JIT 编译器
  • 删除安全管理器。
  • 外部函数和内存 API(孵化器)
  • 矢量 API(第二个孵化器)
  • 基于上下文的(特定于内容的)反序列化过滤器

我们认为此版本中没有实质性的标记更改,但我们正在进行更深入的挖掘以了解它们。因此,我们将其分类如下

  • 与开发人员相关的好功能
  • 特定于开发人员的信息或功能
  • 与 Apple 相关的功能保持同步
  • 清理各种功能

第一类:与开发人员相关的好功能

  • Switch 模式匹配(预览)
  • 生成密封类

Switch 模式匹配(预览)

通过允许模式出现在 case 标签中,使 switch 语句和表达式更加灵活和富有表现力。当需要时,它也使放宽 switch 的 null 敏感性成为可能。

主要有两种模式,如下所示

  • 守卫模式:使用模式 && 布尔表达式进行进一步细化。
  • 括号之间的模式

生成密封类

向 Java 语言添加密封类和接口,使其更好。密封类和接口限制了其他类,接口可以分别扩展和实现它们。

展示一些其他与 JEP 406 相关的模式匹配的进展,这将使其能够更复杂、更清晰地检查类型、强制转换和操作代码模式。

语法

以下语法在 java 17 版本中生成一个密封类

第二类:特定于开发人员的信息或功能

恢复或重建“始终严格的浮点数”语义

此 JEP 使浮点运算统一严格,主要用于科学应用。默认浮点运算、strict 或 strictfp 都在每个平台上为使用浮点数的计算提供相同的结果。

矢量 API(第二个孵化器)

Vector API 与单指令,多数据/SIMD 运算一起使用,其中包括同时处理的多组指令。它使用专门的 CPU 硬件,该硬件提供矢量指令,并支持将这些指令作为管道运行。

因此,新的 API 将使程序员能够编写更有效的代码。它更好地利用了底层硬件的功能。

基于上下文的(特定于内容的)反序列化过滤器

JDK 9 版本使我们能够验证从不受信任的来源接收到的序列化数据,这是安全问题的常见来源。

应用程序可以配置动态选择的、特定于上下文的反序列化过滤器。

增强了“伪随机”数生成器

它为伪随机数生成器提供了一种新的接口类型和解决方案,以简化使用多个 PRNG 算法并正确支持基于流的操作。

JDK 内部封装性增强

由于 JEP 403 删除了标志 -illegal-access,它标志着朝着强烈封装 JDK 内部方向迈出了一步。

如果存在该标志并且平台将忽略该标志,则控制台将发送一条消息以停止使用给定的标志。

外部函数和内存 API(孵化器)

Java 程序员可以从 JVM 外部检索代码。得益于外部函数和内存 API,它控制堆外的内存。

其目的是取代 JNI API 并在性能和安全性方面优于之前的版本。

第三类:与 Apple 相关的功能保持同步

新的 macOS 渲染管道

此 JEP 为 macOS 制作了 Java 2D 内部处理管道,因为 Apple 在 macOS 10.14 中删除了 OpenGL API。 Swing GUI 使用了 OpenGL API。

除了底层引擎之外,当前的 API 没有任何修改,因为实现使用了 Apple Metal API。

macOS/AArch64 端口

Apple 宣布了一项长期战略,将其计算机系列从 X64 切换到 AArch64。借助此 JEP,JDK 现在可以在具有 AArch64 的 macOS 平台上运行。

第四类:清理各种功能

删除 Applet API 以供移除

大多数浏览器将不再支持 applet API,因为它自 JDK9 以来已被弃用。

激活 RMI 的移除

RMI 在过去十年中在 Web 技术中的使用已使 RMI 激活机制过时。

删除实验性的 AOT 和 JIT 编译器

取出基于 Java 的 AOT(提前编译)和 JIT(即时编译)编译器的试用版本。

删除安全管理器。

拒绝安全管理器,以便可以在以后的更新中将其删除。 Java 1.0 版本启动安全管理器。多年来,它从未成为保护客户端代码的主要方法。

以下语法有助于使用注释删除安全管理器。

结论

Java17 为用户和开发人员创建了多个功能。它轻松创建复杂的基于 Web 和基于 Java 的应用程序。为了更好的开发,有多个功能插入和删除。