哈喽,大家好,我是强哥。
就在昨天,3月22日,Oracle正式推出Java 18,最新的Java开发工具包 (JDK) 提供了九个JDK增强建议 (JEP) 的更新和改进。其中包括Java API文档 (JEP 413) 中添加代码片段的功能,这简化了在API文档中添加示例源代码,以及用于原型设计和测试的简单Web服务器 (JEP 408)。
强哥之前有为大家总结了Java 9~Java 17的重要更新点,有兴趣的大家可以去回顾一下:赶紧收藏,Java 9~Java 17主要更新都在这了。
Java 18不是一个长期支持版本,不过其更新内容却也比较丰富,让我们来了解下Java 18中这几个大的更新和改进吧:
库的更新和改进
-
JEP 400:默认为 UTF-8 — 将 UTF-8 设置为标准 Java API 的默认字符集。通过此更改,依赖于默认字符集的 API 将在所有实现、操作系统、语言环境和配置中保持一致。这项建议无异于定义了一个新的Java标准或JDK特定API。这项建议的支持者认为,许多环境中的应用程序不会收到Java将UTF-8作为默认字符集的影响,因为MacOS、许多Linux发行版和许多服务器应用程序已经支持UTF-8。然而,在其他环境中就不一定了,最明显的是依赖默认字符集的应用程序在处理默认字符集时发现,该字符集不是指定字符集后会产生数据表现不正确的问题。数据可能会悄悄发生损坏。预计这项建议主要影响的应该是亚洲地区使用Windows系统的用户身上,也可能是亚洲和其他地区的一些服务器环境。
-
JEP 408: Simple Web Server — 一个命令行工具和 API,用于启动仅提供静态文件的最小 Web 服务器。该工具可用于原型设计、临时编码和测试目的,尤其是在教育环境中。其目标包括一个开箱即用的静态HTTP文件服务器,具有简单的设置和最小的功能,以此来减少开发人员的激活能量,让JDK更加平易近人,并通过命令行提供一个默认的实现,以及一个小型的用于变成创建和定制的API。
-
JEP 416: Reimplement Core Reflection with Method Handles — 在 java.lang.invoke 方法句柄之上重新实现 java.lang.reflect.Method、Constructor 和 Field。通过让方法处理反射的底层机制,降低了 java.lang.reflect 和 java.lang.invoke API 的维护和开发成本。
-
JEP 418: Internet-Address Resolution SPI — 为主机名和地址解析定义服务提供者接口 (SPI),以便java.net.InetAddress可以使用平台内置解析器以外的解析器。
工具
-
JEP 413: Java API 文档中的 JEP 代码片段 —为 JavaDoc 的标准 Doclet 引入了 @snippet 标记,以简化在 API 文档中包含示例源代码。
后续 JDK 版本的预览和孵化器
-
JEP 417: Vector API(第三孵化器)——为开发人员提供 API,以可靠地利用提供可扩展矢量扩展的 CPU 架构。与非扩展处理器上的等效计算相比,这将带来卓越的性能。
-
JEP 419:外部函数和内存 API(第二个孵化器)——通过这个API,Java程序可以与外部代码和数据进行相互操作。通过调用外部函数(JVM以外的代码)以及安全的访问外部内存(JVM不管理的内存),该API将被允许Java调用本地库以及处理本地数据,而且还没有JNI(Java本地接口)那样的脆弱和危险。其谜底是用一个卓越的、纯粹的Java开发模型来取代JNI。这个API曾在JDK 17中得到实现。对于JDK 18,将根据反馈意见再次进行改进,如支持更多的载体,内存访问var句柄中的Boolean和MemoryAddress,以及将Java数组复制到内存段或从内存段内复制等功能。
-
JEP 420: Switch 的模式匹配(第二次预览版) ——通过对 switch 表达式和语句的模式匹配以及对模式语言的扩展来增强 Java 编程语言。将模式匹配扩展到 switch 允许针对多个模式测试表达式,每个模式都有特定的操作,因此可以简洁安全地表达复杂的面向数据的查询。
面向未来的 Java 程序
-
JEP 421: Deprecate Finalization for Removal ——Finalization 目前默认保持启用状态,但可以禁用以方便测试。在未来的版本中,它将默认禁用,在以后的版本中,它将被删除。依赖最终确定的库和应用程序的维护者应该考虑迁移到其他资源管理技术,例如try-with-resources 语句和cleaners。
强哥有话说
好啦,以上就是Java 18的主要更新点,小伙伴们有兴趣想要尝尝鲜的,现在也已经可以在Oracle官网上下载最新的Java 18了:
虽然说现在大多数公司用的还是Java 8,不过随着 SpringBoot 3.0,Elasticsearch8.0 官宣拥抱 Java 17,我们Java的下一个版本很可能会从Java 8直接跳到Java 17。那么,Java 18的简单了解还是有点用的哈。