最近 Oracle 发布了Java 编程语言和虚拟机的最新版本:Java 23。作为 Java 21 之后的第二个非 LTS 版本,该如果你还没了解过,那就一起了解一下吧(内含赠书)。最后,我们再一起看看 Java 24 新动态。
Java 23 新特性
通过 Project Amber 提供的语言特性
JEP 455:Primitive Types in Patterns, instanceof, and switch(预览版)
通过使语言更加统一且更具表达能力,帮助提高 Java 编程的工作效率。通过消除与开发人员在使用模式匹配、instanceof 和 switch 时遇到的基元类型限制,该 JEP 支持所有模式情景的基元类型模式,有助于增强模式匹配,并扩展 instanceof 和 switch,使其能够与所有基元类型一起使用。
JEP 476:Module Import Declarations(预览版)
开发人员可以轻松快速地导入由模块导出的所有程序包,无需将导入代码放到模块中,从而提高工作效率。这简化了所有开发人员对模块化库的重用,让初学者能够更轻松地使用第三方库和基本 Java 类,无需了解它们在程序包层次结构中的位置。
JEP 477:Implicitly Declared Classes and Instance Main Methods(第三预览版)
通过 Java 编程入门教程,学生无需了解为大型程序而设计的语言功能,即可顺利编写第一个程序,加快了上手速度和技能培养速度。有鉴于此,教育工作者和导师可以循序渐进地介绍概念,学生也可以编写简化的单类程序声明,并随着个人技能的提升,无缝扩展程序并使用更高级的功能。此外,经验丰富的 Java 开发人员也可以以简洁的方式编写小程序,无需使用为大型项目设计的工具。
JEP 482:Flexible Constructor Bodies(第二预览版)
允许语句在显式构造器调用之前出现,例如 super(..) 或 this(..),从而帮助开发人员提高工作效率。这些语句无法引用正在构建的实例,但在调用另一个构造器之前可以对其字段进行初始化,这使得方法被覆盖时,类会更加可靠。这不仅让开发人员有更大的自由来表达构造函数的行为,还能够延续现有保证,即允许构造器在类实例化期间按自上而下的顺序运行。
库
JEP 466:Class-File API(第二预览版)
通过提供用于解析、生成和转换 Java 类文件的标准 API,帮助开发人员提高工作效率。
JEP 469:Vector API (八次孵化阶段)
新推出的 API 允许以一种在运行时,可靠地编译为支持的 CPU 架构上的向量指令方式表达向量计算,帮助开发人员提高生产力。因此,开发人员可以实现优于等效标量计算的表现。
JEP 473:Stream Gatherers(第二预览版)
通过增强 Stream API 来支持自定义中间操作,让流管道以现有内置中间操作无法轻松实现的方式转换数据,从而帮助开发人员提高工作效率。此特性能够使流管道更灵活、更具表达力,允许自定义中间操作处理大小不限的流,帮助开发人员高效读取、写入和维护 Java 代码。
JEP 480:Structured Concurrency(第三预览版)
通过面向结构化并发的新 API 简化并发编程,帮助开发人员提高多线程代码的可维护性、可靠性和可观察性。通过将在不同线程中运行的相关任务组合并为单个工作单元,结构化并发可以消除因取消和关闭而产生的常见风险,例如线程泄漏和取消延迟。
JEP 481:Scoped Values(第三预览版)
支持开发人员在线程内和线程之间共享不可变数据,从而提高项目的易用性、可理解性、性能和稳健性。
性能和运行时更新
JEP 474:ZGC:Generational Mode by Default
通过将 Z Garbage Collector (ZGC) 的默认模式切换到层代模式,帮助开发人员提高效率,从而降低支持两种不同模式所需的资源和维护成本。
工具
JEP 467:Markdown Documentation Comments
通过启用 Javadoc 文档注释以 Markdown 编写而不是仅以 HTML 和 Javadoc @-tags 编写,帮助开发人员提高效率和生产力。通过在文档注释中使用 Markdown 语法以及 HTML 元素和 JavaDoc 标记,开发人员可以更轻松地以源形式编写和读取 API 文档注释,而不会对现有文档注释的解释产生不利影响。
管理职责
JEP 471:Deprecate the Memory-Access Methods in sun.misc.unsafe for Removal
通过帮助开发人员了解其应用何时直接或间接依赖于 sun.misc.Unsafe 中的内存访问方法,该方法计划在将来的版本中删除,从而为开发人员提供了简化的工具集。
每一条新特性都是为了改善或提升编程语言的能力,而语言特性在将来还会不断变化。对于 Java 程序员来说,要如何去应对变化带来的挑战呢?答案是只要掌握好一些经典、通用的编程原则,就能以不变应万变。《Effective Java 中文版(原书第3版)》这本书就总结提炼出了 90 条编程原则,帮助程序员理解 Java 语言精髓,发挥出工具的威力,写好程序。感兴趣的小伙伴通过下面链接购买可以直接优惠购买:
如果你平时喜欢分享技术,这本书目前在社区还有免费赠书额度,使用社区积分直接兑换即可,传送门:https://spring4all.com/7682.html
Java 24 新动态
计划于2025年3月发布的JDK 24 GA版本目前仅包含一个针对JDK 24的JEP。然而,根据已提交的JEP候选和草案,可以推测出其他可能被纳入JDK 24的JEP。以下是一些关键的JEP及其进展:
JEP 472:准备限制对JNI的使用
该JEP提议限制与JDK 22中引入的外部函数和内存(FFM)API中的受限方法一起使用的JNI。从JDK 23开始,如果FFM用户未启用不安全的本地访问,Java运行时将显示有关使用JNI的警告,未来版本中将抛出异常而非警告。
JEP 404:分代Shenandoah(实验性)
尽管目前处于Candidate状态,但已更新并包含在JDK 24中。预计将很快提升为Proposed to Target状态。该JEP最初目标为JDK 21,但由于审查风险和时间限制被移除,Shenandoah团队决定在未来版本中实现最佳的分代Shenandoah。
JEP 401:值类和对象(预览版)
在Valhalla项目的支持下,引入开发人员声明的基元类,这些类由Value Objects API定义,用于定义新的基元类型。
JEP 草案 8334712:类文件API
经过两轮预览后,计划在JDK 24中完成该特性。该API用于解析、生成和转换Java类文件,最初作为JDK中ASM的内部替代品,未来将作为公共API开放。
JEP 草案 8326035:CDS对象流
提议在ZGC中添加CDS对象归档机制,具有统一的CDS对象归档格式和加载器,使GC实现细节与CDS存档对象流机制分离。
JEP 草案 8300911:PEM API(预览版)
引入用于编码和解码隐私增强邮件(PEM)格式的API,用于存储和发送加密密钥和证书。
JEP 草案 8291976:在HttpClient中支持HTTP/3
提议更新JDK 11中的HTTP客户端以支持HTTP/3协议,使应用程序和库能够与HTTP/3服务器交互,并获得HTTP/3的好处。
JEP 草案 8312611:稳定值(预览版)
引入计算常数的概念,定义为最多初始化一次的不可变值持有者,提供final字段的性能和安全优势,同时增加初始化时间的灵活性。