Java 23新特性概述

近段时间有点事,已经有一个多月没更新了,不过事已经处理完毕了,从今天开始还是每周更新至少一篇,这次就介绍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(第八轮孵化)

  • 首先在 JEP 338 (JDK 16)中提出了 Vector API,并将其作为 孵化 API

  • 我们建议在 JEP 414 中进行更多轮次的孵化 (集成到 JDK 17 中)、JEP 417 (JDK 18)、JEP 426 (JDK 19)、 JEP 438 (JDK 20)、JEP 448 (JDK 21) 和 JEP 460 (JDK 22)。

  • 此JEP建议进行第八轮孵化。

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模块,并可以直接使用ListMapCollectorsStream类,而不用进一步导入。

八、JEP 477:隐式声明的类和实例方法(第三次预览)

  • 隐式声明的类和实例 main 方法最初由 JEP 445 作为预览功能提出。

  • 在 JDK 21.该功能再次预览 JEP 463

  • 根据反馈进行了重大更改,并在 JDK 22 中提供。

此JEP建议再此预览,并添加了两个功能:

  • 隐式声明的类会自动导入三个静态方法,用于使用控制台进行简单的文本 I/O。这些方法在新的顶级类 java.io.IO 中声明。

  • 隐式声明的类会根据需要自动导入所有 public 顶级类和接口导出的软件包的 java.bas模块。

ps:可以参考Java 21对该功能的介绍。

九、JEP 480:结构化并发(第三次预览)

ps:可以参考Java 21对该功能的介绍。

十、JEP 481:作用域值(第三次预览)

  • 范围值 API 通过 JEP 429 在 JDK 20 中孵化。

  • 通过 JEP 446 成为 JDK 21 中的预览 API。

  • 并通过 JEP 464 在 JDK 22 中重新预览。

  • 此JEP建议在JDK 23再次预览,细微改动。

ps:可以参考Java 21对该功能的介绍。

十一、JEP 482:灵活的构造函数体(第二次预览)

ps:可以参考Java 22对该功能的介绍。

END:更多新特性的介绍,推荐移步至👉 Java新特性学习导航(8~24 持续更新)👈 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橡 皮 人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值