
400: UTF-8 by Default
408: Simple Web Server
413: Code Snippets in Java API Documentation
416: Reimplement Core Reflection with Method Handles
417: Vector API (Third Incubator)
418: Internet-Address Resolution SPI
419: Foreign Function & Memory API (Second Incubator)
420: Pattern Matching for switch (Second Preview)
421: Deprecate Finalization for Removal
除了数以千计的性能、稳定性和安全性更新外,Java 18 还提供了九项增强/更改(称为JDK 增强提案 - JEP),包括两个交付的孵化器模块和一个预览语言功能。
Java 18 提供的九个 JEP 分为四类:
JEP 400:默认为 UTF-8
此次更新的主要原因是 UTF-8 已成为世界上使用最广泛的字符集,因此在 Java 中明确选择它可以大大简化事情。
当代码依赖于默认字符集时,使 Java 程序更具可预测性和可移植性;阐明标准 Java API 在何处使用默认字符集并在整个标准 Java API 中标准化 UTF-8,控制台 I/O 除外。
命令查看默认字符集
java -XshowSettings:properties -version 2>&1 | grep file.encoding
file.encoding = UTF-8
file.encoding.pkg = sun.io
JDK API查看
Charset.defaultCharset()
JEP 408:简单的Web服务器
开箱即用的静态 HTTP 文件服务器,设置简单,功能最少,可减少开发人员的激活能量,使 JDK 更易于使用,并通过命令行提供默认实现以及用于编程创建和自定义的小型 API。
$ jwebserver
Binding to loopback by default. For all interfaces use "-b 0.0.0.0" or "-b ::".
Serving /cwd and subdirectories on 127.0.0.1 port 8000
URL: http://127.0.0.1:8000/
JEP 416:使用方法句柄重新实现核心反射
减少对未来语言特性的反射支持的维护和开发成本。它还简化了 Hotspot VM 代码。
JEP 418:互联网地址解析 SPI(服务提供者接口)
可以使用开发人员提供的备用解析器替换默认的操作系统本机解析器,这通常会导致阻塞操作系统调用。
JEP 413:Java API 文档中支持Snippets代码片段
促进API 文档中源代码片段的验证和格式化。尽管正确性最终是作者的责任,但对 javadoc 和相关工具的增强支持可以使其更容易实现,支持现代样式,例如语法突出显示,以及名称与声明的自动链接,并支持更好的集成开发环境(IDE) 支持创建和编辑片段。
/**
* The following code shows how to use {@code Optional.isPresent}:
* {@snippet :
* if (v.isPresent()) {
* System.out.println("v: " + v.get());
* }
* }
*/
JEP 417 : Vector API第三孵化器
引入了一种与平台无关的可靠方式,可以清晰、简洁地表达支持的 CPU 架构的广泛矢量计算。
JEP 419:外部函数和内存 API第二个孵化器
极大地简化了创建利用本机的 Java 程序所需的工具和知识。这将允许 Java 开发人员访问专门的非 Java 库。
JEP 420 :开关第二次预览的模式匹配
通过扩展 switch 表达式和语句的表现力和适用性来提高 Java 开发效率。在 switch 中允许模式匹配将使表达复杂的面向数据的查询更加简洁和安全。
Old:
static String formatter(Object o) {
String formatted = "unknown";
if (o instanceof Integer i) {
formatted = String.format("int %d", i);
} else if (o instanceof Long l) {
formatted = String.format("long %d", l);
} else if (o instanceof Double d) {
formatted = String.format("double %f", d);
} else if (o instanceof String s) {
formatted = String.format("String %s", s);
}
return formatted;
}
jdk18:
static String formatterPatternSwitch(Object o) {
return switch (o) {
case Integer i -> String.format("int %d", i);
case Long l -> String.format("long %d", l);
case Double d -> String.format("double %f", d);
case String s -> String.format("String %s", s);
default -> o.toString();
};
}
JEP 421:弃用 Finalization
通过提供简单的工具来帮助检测对已弃用功能的依赖,使开发人员为将来最终删除过时的终结功能做好准备。
Oracle JDK 18 下载地址:
https://www.oracle.com/java/technologies/downloads/
参考地址:
https://www.oracle.com/news/announcement/oracle-releases-java-18-2022-03-22/
https://openjdk.org/projects/jdk/18/
天上白玉京,十二楼五城