近段时间有点事,已经有一个多月没更新了,不过事已经处理完毕了,从今天开始还是每周更新至少一篇,这次就介绍Java 23(目前最新)
Java 23于2024年9月17日正式发布(目前最新的jdk版本),共有12个特性,本次就介绍11个:
更多内容读者可自行阅读:OpenJDK Java 23文档
一、JEP 455:模式中的原始类型、instanceof和switch(首次预览)
在JDK 23之前,instanceof只支持引用类型,switch表达式和语句的case只能用整数字面量、枚举常量和字符串字面量。
在JDK 23该预览特性中,instanceof和switch全面支持所有类型,包括引用和基本类型(byte、short、int、long...),比如:
int x = ...
switch (x) {
case 1, 2, 3 -> System.out.println("Low");
case 4, 5, 6 -> System.out.println("Medium");
case 7, 8, 9 -> System.out.println("High");
}
二、JEP 467:Markdown文档注释
自JDK 23开始,允许我们使用Markdown编写JavaDoc注释:
三、JEP 469:向量API(第八轮孵化)
ps:这个可以参考Java 16中对这一特性的介绍。
四、JEP 473:流收集器(第二次预览)
在 JEP 461 中提议将 Stream Gatherers 作为预览功能,并在 JDK 22 中提供它。
此JEP建议在 JDK 23 中重新预览 API,不做任何更改。
ps:可以参考Java 22对这一特性的介绍。
五、JEP 471:弃用sun.misc.Unsafe中的内存访问方法
此JEP建议弃用sun.misc.Unsafe中的内存访问方法,以便在将来的版本中进行移除,这些不安全的方法已经有安全高效的替代方法:
java.lang.invoke.VarHandle:JDK 9引入,提供了一种安全有效地操作堆内存的方法,包括对象的字段、类的静态字段以及数组元素。
java.lang.foreign.MemorySegment:JDK 22引入,提供了一种安全有效地访问堆外内存的方法,有时会与varHandle协同工作。
这两个类是Foreign Function & Memory API(外部函数和内存 API) 的核心组件,分别用于管理和操作堆外内存,在 JDK 22 中正式转正。
六、JEP 474:ZGC默认为分代模式
ZGC默认切换为分代模式,弃用非分代模式,并计划在未来版本中移除。
七、JEP 476:模块导入声明(首次预览)
从Java 1.0开始,Java.lang包的所有类都会自动导入到每个.java文件中,这就是为什么我们可以使用Objec、String、Integer等类而不用import包的原因。
再者我们也可以用java.util.*的方式导入完整的包,而不用单独导入List、Set等类。
此JEP允许我们导入完整的模块,也就是可以导入整个模块的所有到处包,而无需逐个声明包的导入,该特性简化了模块化库的重用,特别是有多个模块时,避免了大量的包导入声明,比如:
import module java.base;
public static Map<Character, List<String>> groupByFirstLetter(String... values) {
return Stream.of(values).collect(
Collectors.groupingBy(s -> Character.toUpperCase(s.charAt(0))));
}
上述方式导入了完整的java.base模块,并可以直接使用List、
Map、
Collectors、
Stream类,而不用进一步导入。
八、JEP 477:隐式声明的类和实例方法(第三次预览)
此JEP建议再此预览,并添加了两个功能:
隐式声明的类会自动导入三个
静态
方法,用于使用控制台进行简单的文本 I/O。这些方法在新的顶级类 java.io.IO 中声明。隐式声明的类会根据需要自动导入所有 public 顶级类和接口导出的软件包的 java.bas模块。
ps:可以参考Java 21对该功能的介绍。
九、JEP 480:结构化并发(第三次预览)
ps:可以参考Java 21对该功能的介绍。
十、JEP 481:作用域值(第三次预览)
ps:可以参考Java 21对该功能的介绍。
十一、JEP 482:灵活的构造函数体(第二次预览)
这个特性最初在 JDK 22 由 JEP 447: Statements before super(...) (Preview)提出。
此JEP建议在JDK 23中再次预览。
ps:可以参考Java 22对该功能的介绍。
END:更多新特性的介绍,推荐移步至👉 Java新特性学习导航(8~24 持续更新)👈