New Features of Java 232025年5月3日 | 阅读 11 分钟 Oracle 公司将于 2024 年 9 月 17 日发布 **Java Development Kit (JDK) 23**。这是一个备受期待的版本。它包含各种 **新特性**、**增强功能** 和 **更新**。新的增强功能提高了 **性能**、**安全性** 以及 **开发人员** 的整体体验。 此版本目前处于 **初始发布候选版** 阶段。这意味着特性和更新正在开发中,但尚未最终确定。此版本专为 **Java 编程** 构建,并进行了先进的 **性能优化**、尖端的 **安全措施** 和改进的工具支持。 在本节中,我们将详细介绍 **JDK 23** 的内容,包括 **新特性**、重要**新增功能**以及相对于 **JDK 22** 的**升级**。 Java 23 包含以下十二项特性和增强功能: 455:模式、instanceof 和 switch 中的原始类型 466:类文件 API 467:Markdown 文档注释 469:Vector API 473:Stream Gatherers 471:弃用 sun.misc.Unsafe 中的内存访问方法以供移除 474:ZGC:默认启用分代模式 476:模块导入声明 477:隐式声明类和实例 main 方法 480:结构化并发 481:作用域值 482:灵活的构造函数体 让我们详细讨论每个特性和增强功能。 1. 增强的原始类型模式Java 23 为模式匹配功能带来了一些最有前景的扩展,将原始类型纳入了 instanceof 和 switch 语句。这项特性简化了语法并减少了样板代码,允许开发人员使用不同的数据类型,而无需进行类型断言。 好处
用例 通过这种方式,在处理不同类型的对象时,使用增强的原始类型模式可以避免额外的繁琐类型区分,尤其是在 switch-case 结构中。 文件名:PrimitivePatternExample.java 输出 Integer: 42 2. 灵活的构造函数体它们允许开发人员在构造函数的 this() 或 super() 之前放置非引用代码语句。此增强功能在创建对象时提供了更具体的访问权限,减少了直接与正在初始化的对象相关的设置逻辑。 好处
用例 当某些条件或计算必须在调用另一个构造函数或超类构造函数之前执行时,此特性最为有用,可以使代码更清晰、组织更好。 文件名:FlexibleConstructor.java 输出 Value: 10 3. 简化的模块导入声明Java 23 提供了新的导入语法,无需列举模块内的所有包即可导入整个模块。此更改极大地简化了在模块化应用程序中处理依赖模块的过程。 好处
用例 在需要某个特定模块的多个包的大型应用程序中,这降低了导入的复杂性,并鼓励程序员专注于功能而不是导入。 示例 4. 结构化并发结构化并发添加了一个新的 API 概念,系统将不同线程中工作的多个相关任务视为一个单一的工作单元。这种方法简化了错误处理以及如何将取消传播到多个 异步 任务,从而提高了可靠性。 好处
用例 因此,结构化并发最需要用于必须执行许多并发操作的应用程序,例如 Web 服务器或 API,以处理数据管道;例如,在重叠执行期间,管理任务的生命周期或错误可能会使情况复杂化。 文件名:StructuredConcurrencyExample.java 输出 User: Alice, Order: 12345 执行步骤1. 启用预览功能进行编译 2. 启用预览功能运行 5. Stream GatherersStream gatherers 通过添加中间自定义操作的能力,为 Java Stream API 增加了灵活性。此功能允许构建复杂的数据处理流,并对数据在流计算过程中如何处理拥有更大的控制权。 好处
用例 当需要 Stream 上下文中默认操作未涵盖的进一步聚合或转换逻辑时,可以使用 Stream gatherers,例如,用于分组的属性的唯一值。 文件名:StreamGathererExample.java 输出 {a=[apple], b=[banana], c=[cherry]} 6. Markdown 文档注释JavaDoc 已更新,支持使用 markdown 文档注释而不是 HTML 文档标签进行文档记录,从而使文档更容易为程序员编写。 好处
用例 在代码中使用 Markdown 进行文档注释有助于开发人员使 API 文档在视觉上更简洁明了,从而使用户了解如何使用类或方法。 7. 分代 ZGCZ Garbage Collector (ZGC) 从此版本开始默认以分代模式运行。此更改通过在垃圾收集过程中将年轻代和老年代分开,增强了内存分配。 好处
用例 由于分代 ZGC 为即时响应和低延迟敏感型应用程序(如实时处理或大型 Web 处理应用程序,其中标准性能至关重要)提供了良好的功能。 8. 作用域值作用域值能够将不可更改的数据在线程内及其子线程的方法之间传递。它提供了比传统的线程局部变量更好的解决方案,但同时保持了它们的不可变性。 好处
用例当处理需要保持不变且在不同线程间有效共享而不会被其他 方法修改的标记时,它变得很有用;本质上,当用作常量或可以在程序其他部分使用的设置时,这些值非常方便。 文件名:ScopedValuesExample.java 输出 Scoped Value: Initial Value Scoped Value in another thread: Initial Value 9. 类文件 APIJava 中的类文件 API 是一个方便的工具,能够读取和操作 Java 源文件以及它们的写入。此 API 用于分析或转换字节码的工具;它提供了一种在程序内访问类文件中定义的类、方法和字段的许多方面的方法。类文件 API 可用于构建类分析器、转换器和生成器,以及 字节码。 好处
用例 例如,开发人员可以使用类文件 API 来构建一个检测类依赖关系的应用程序,或者一个从类文件结构自动生成文档的应用程序。以下是一个读取类文件的简单示例: 文件名:ClassFileReader.java 输出 Class file read successfully: MyClass.class 10. Vector APIJava 中的 Vector API 包含一个对象,用于模拟 Java 程序中的 SIMD(单指令多数据)指令。自 Java 16 起实现,并在后续版本中进行了额外更新,此 API 允许程序员编写矢量化代码,而无需了解使用 SIMD 指令的细节。 好处
用例 Vector API 的功能在 机器学习、密码学 或线性代数等领域尤其有价值。以下是一个使用 Vector API 对两个数组进行相加的示例: 文件名:VectorAddition.java 输出 Result: [1.8926005, 1.3122721, 1.0168884, 0.80259097, 0.8667154, 1.0061616, 0.6949272, 0.483315] 执行步骤编译 运行 11. 弃用 sun.misc.Unsafe 中的内存访问方法以供移除Sun.misc.Unsafe 类一直是一个 Java 的“出口”,因为它可能进行 内存 操作,这些操作会绕过标准的安全机制。由于软件行业的进步,该类已弃用了一些内存访问方法,这些方法将在后续的 Java 版本中逐步淘汰。此举旨在帮助开发人员寻找标准库提供的更好的替代方案。 好处 先前的工作表明,它可以消除内存损坏或其他不安全的操作。 鼓励使用更安全、遵循 Java 原则的 API。 这是有益的,因为它消除了难以学习且风险较高的 Java API,这些 API 很少使用。 用例 不鼓励不安全的内存访问,并建议开发人员转向更安全的构造,如 ByteBuffer 或标准库的某些功能。例如: 文件名:SafeMemoryAccess.java 输出 Value from ByteBuffer: 42 12. 隐式声明类和实例 main 方法从 Java 22 开始,Java 中出现了隐式声明类和实例 main 方法,这改进了可执行程序的定义方式。此特性使开发人员能够在不需要显式 public class 和 static main 方法的情况下编写程序。 好处
用例
文件名:HelloWorld.java 输出 Hello, World! 执行步骤编译 运行 结论Java 23 为语言集带来了新的强大修饰符,这些修饰符有助于提高可用性、速度和表达力。改进的原始类型模式扩展了可以与原始类型匹配的模式类型。虽然灵活的构造函数体不允许构造类的对象,但它们在这样做时具有一定的灵活性。 简化的模块导入解决了模块化应用程序中的依赖管理问题。结构化并发增强了多线程范式中功能实现期间的错误和任务控制。Stream Gatherers 在 Stream API 中提供了用户定义的函数,并增加了强大的数据处理特性。 Markdown 文档注释增强了编写文档的便利性,并提高了文档的可读性。分代 ZGC 为需要低延迟的应用程序提供了用于高效内存使用的垃圾收集器,而作用域值有助于更轻松地在多个线程之间传递数据。总而言之,这些特性使 Java 成为一种更现代的语言,并有效地优化了语言以适应开发人员的需求。 下一主题Java 中的迷人数字 |
逆向工程是软件开发中的一个关键过程,它使开发人员能够深入了解现有代码库。它使他们能够理解复杂的系统、识别设计模式并提高可维护性。逆向工程的强大工具之一是 ArgoUML,一个流行的开源...
阅读 3 分钟
Java 作为一种强类型语言,在处理不同数据类型时通常需要显式类型转换。最常见的转换场景是将对象转换为整数。这在处理从外部源(如数据库或用户输入)检索的数据时很重要,在这些数据中,数据...
阅读 8 分钟
在 Java 编程领域,与数据库交互是构建健壮且可扩展应用程序不可或缺的一部分。为了方便数据库操作,Java 提供了两个包:java.sql 和 javax.sql。虽然这两个包都用于提供数据库访问,但它们在...上有所不同。
7 分钟阅读
技术日新月异。有时,我们需要定期在服务器上执行作业。在服务器上手动运行作业是一项困难的任务,用户或管理员无法多次完成。为了...
阅读 8 分钟
在 Java 中,就像金字塔和三角形模式一样,大多数面试官也会让开发人员编写字母模式。字母模式,如 A、B、C... 是基于用户给定的模式高度设计的。宽度...
阅读 8 分钟
java.nio.charset.CharsetEncoder 的内置方法之一是 malformedInputAction()。对于格式错误的输入问题,CharsetEncoder 会返回此编码器的当前操作。返回的三种 CodingErrorAction 类型是 IGNORE、REPLACE 和 REPORT。不符合所用字符集预期格式的字符...
阅读 3 分钟
在 Java 中,当我们处理日期和时间时,有时需要比较日期。Java 中的日期比较与数字比较不同。因此,在 Java 中比较两个日期是一项棘手的任务。我们...
阅读 6 分钟
? Java 中的 main() 函数是任何独立应用程序的起点。默认情况下,"main" 线程是一个非守护线程,负责执行它。这意味着,在 main() 线程和所有非守护线程执行完毕之前,Java...
阅读 4 分钟
? Java 凭借其强大的类型系统,可确保类型安全并 避免许多常见的编程错误。然而,这也意味着您可能会在编译期间遇到“类型不兼容”错误。当您尝试使用另一种类型的值来分配或使用一种类型的值时,就会发生这些错误……
阅读 4 分钟
Java 提供了两个非常强大的库来处理 JSON 数据,即 JACKSON 和 Gson 库。我们经常需要将 JSON 响应转换为 map 以便轻松处理返回的 JSON 数据。我们可以轻松地将 JSON 数据转换为 map,因为 JSON 格式...
7 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India