Java 22正式发布,一文了解全部新特性
就在昨晚,Java 22正式发布!该版本提供了 12 项功能增强,其中包括 7 项预览功能和 1 项孵化器功能。它们涵盖了对 Java 语言、API、性能以及 JDK 中包含的工具的改进。
下面就来一起学习一下该版本都更新了哪些新特性!
Unnamed Variables & Patterns - JEP 456
JEP 456 - 未命名变量和模式:当需要但未使用变量声明或嵌套模式时,提高了可读性。两者都由下划线字符表示。
价值
- 捕获开发人员的意图,即未使用给定的绑定或 lambda 参数,并强制执行该属性以澄清程序并减少出错的机会。
- 通过识别必须声明(例如,在 catch 子句中)但未使用的变量,提高所有代码的可维护性。
- 允许多个模式出现在单个 case 标签中,如果它们都没有声明任何模式变量。
- 通过消除不必要的嵌套类型模式来提高记录模式的可读性。
Statements before super (…) [Preview] - JEP 447
在构造函数中,允许不引用正在创建的实例的语句出现在显式构造函数调用之前。
价值
- 为开发人员提供了更大的自由来表达构造函数的行为,从而可以更自然地放置目前必须纳入辅助静态方法、辅助中间构造函数或构造函数参数中的逻辑。
- 保留构造函数在类实例化期间按自上而下顺序运行的现有保证,确保子类构造函数中的代码不会干扰超类实例化。
- 不需要对 Java 虚拟机进行任何更改。此 Java 语言功能仅依赖于 JVM 验证和执行构造函数中显式构造函数调用之前出现的代码的当前能力。
String Templates (2nd Preview) - JEP 459
字符串模版的第2个预览版,关于该功能之前DD给大家介绍过,更多细节可以看看之前的这篇文章String Templates(字符串模版)
价值
- 通过轻松表达包含运行时计算值的字符串,简化了 Java 程序的编写。
- 增强混合文本和表达式的表达式的可读性,无论文本适合单个源行(如字符串文字)还是跨越多个源行(如文本块)。
- 通过支持模板及其嵌入表达式的值的验证和转换,提高 Java 程序的安全性,这些程序从用户提供的值组成字符串并将其传递到其他系统(例如,构建数据库查询)。
- 通过允许 Java 库定义字符串模板中使用的格式化语法来保留灵活性。
- 简化了接受非 Java 语言(例如 SQL、XML 和 JSON)编写的字符串的 API 的使用。
- 允许创建根据文字文本和嵌入表达式计算的非字符串值,而无需通过中间字符串表示形式进行传输。
Implicitly Declared Classes and Instance Main Methods (2nd Preview) - JEP 463
隐式声明的类和实例主要方法(2nd 预览)- JEP 463
学生可以编写他们的第一个 Java 程序,而无需了解为大型程序设计的语言功能。学生无需使用单独的语言方言,而是可以为单类程序编写简化的声明,然后随着技能的增长无缝扩展他们的程序以使用更高级的功能。关于该特性,之前DD也介绍过,更多细节可见这篇文章未命名类和实例的Main方法
价值
- 加速 Java 学习
- 为 Java 编程提供了一个平滑的入门通道,以便教师可以循序渐进地介绍概念。
- 帮助学生以简洁的方式编写基本程序,并随着他们的技能增长而优雅地扩展他们的代码。
- 减少编写简单程序(例如:脚本和命令行实用程序)的方式。
- 不引入单独的初学者工具链;学生程序应该使用与编译和运行任何 Java 程序相同的工具来编译和运行。
Foreign Function & Memory API - JEP 454
外部函数和内存 API - JEP 454
允许 Java 程序与 Java 运行时之外的代码和数据进行互操作。通过有效地调用外部函数(即 JVM 外部的代码),并安全地访问外部内存(即不受 JVM 管理的内存),API 使 Java 程序能够调用本机库并处理本机数据,而不会出现脆弱性和危险。 JNI。
价值
- 生产力:用简洁、可读且纯 Java API 取代脆弱的本机方法和 Java 本机接口 (JNI)。
- 性能:提供对外部函数和内存的访问,其开销与 JNI 和 sun.misc.Unsafe 相当(如果不是更好的话)。
- 广泛的平台支持:允许在 JVM 运行的每个平台上发现和调用本机库。
- 一致性:提供在多种内存(例如本机内存、持久内存和托管堆内存)中操作无限大小的结构化和非结构化数据的方法。
- 健全性:保证没有释放后使用错误,即使在多个线程之间分配和释放内存时也是如此。
- 完整性:允许程序使用本机代码和数据执行不安全的操作,但默认警告用户此类操作。
Class-File API (Preview) - JEP 457
类文件 API(预览版)- JEP 457,提供用于解析、生成和转换 Java 类文件的标准 API。
价值
- 该API允许依赖它的框架和程序自动支持最新JDK中的最新类文件,以便可以快速、轻松地采用以类文件表示的新语言和VM功能。
Stream Gatherers (Preview) - JEP 461
Stream Gatherers(预览版)- JEP 461,增强了 Stream API 以支持自定义中间操作。这将允许流管道以现有内置中间操作不易实现的方式转换数据。
价值
- 通过使流中的常见自定义操作更加灵活和富有表现力,提高开发人员的工作效率和代码可读性。尽可能允许中间操作操作无限大小的流。
Structured Concurrency (2nd Preview) - JEP 462
结构化并发(2nd 预览版)- JEP 462,简化并发编程。结构化并发将在不同线程中运行的相关任务组视为单个工作单元,从而简化错误处理和取消、提高可靠性并增强可观察性。
价值
- 通过推广一种编程风格来简化并发代码的开发,这种编程风格可以消除因取消和关闭而产生的常见风险(例如线程泄漏和取消延迟),并提高并发代码的可观察性。
Scoped Values (2nd Preview) - JEP 464
范围值(2nd 预览)- JEP 464,实现线程内和线程间不可变数据的高效共享。
价值
- 易于使用 - 提供一个编程模型来在线程内以及与子线程共享数据,以简化有关数据流的推理。
- 可理解性——使共享数据的生命周期从代码的语法结构中可见。
- 鲁棒性——确保调用者共享的数据只能由合法的被调用者检索。
- 性能——将共享数据视为不可变,以允许大量线程共享,并实现运行时优化。
Vector API (7th Incubator) - JEP 460
矢量 API(7th 孵化器)- JEP 460,一个用于表达向量计算的 API,可在运行时可靠地在支持的 CPU 架构上编译为最佳向量指令,从而实现优于等效标量计算的性能。此 JEP 建议在 JDK 22 中重新孵化该 API,相对于JDK 21。该实现包括错误修复和性能增强。我们包括以下显着变化:
- 支持使用任何原始元素类型的数组支持的堆 MemorySegments 进行向量访问。以前的访问仅限于由字节数组支持的堆 MemorySegment。
价值
- 提供清晰简洁的 API,能够清晰简洁地表达各种向量计算,这些向量计算由循环内组成的向量运算序列组成,并且可能还包含控制流。
- 该 API 设计为与 CPU 架构无关,可在支持向量指令的多种架构上实现。
- 在 x64 和 AArch64 架构上提供可靠的运行时编译和性能。
Regional Pinning for G1 - JEP 423
G1 的区域固定 - JEP 423,通过在 G1 中实现区域固定来减少延迟,以便在 Java 本机接口 (JNI) 关键区域期间无需禁用垃圾收集。
价值
- 使用 JNI 时,Java 线程无需在 G1 GC 操作完成之前等待,从而提高开发人员的工作效率。
Launch Multi-File Source-Code Programs - JEP 458
启动多文件源代码程序 - JEP 458,允许用户运行作为多个 Java 源代码文件提供的程序,而无需先进行编译。
价值
- 通过使从小程序到大型程序的过渡更加渐进,提高开发人员的工作效率,使开发人员能够选择是否以及何时配置构建工具。
- 请注意,预览功能已完全指定并完全实现了 Java SE 平台的语言或 VM 功能,但它们是暂时的。它们在 JDK 功能版本中提供,以便开发人员根据实际使用情况提供反馈,然后再在未来版本中永久保留。这也为工具供应商提供了在最终确定为 Java SE 标准之前致力于支持功能的机会。
- 孵化器模块中的 API 将非最终 API 和非最终工具交给开发人员和用户,以收集反馈,最终提高 Java 平台的质量。
- 除了 JEP 中描述的更改之外,发行说明中还列出了许多较小的更新,许多应用程序开发人员和系统管理员都会对此感兴趣。其中包括弃用过时的 API 和删除以前弃用的 API。
其他更新
Java 22 发行说明中还有一些其他关键更新:
- 向 keytool 和 jarsigner 添加附加算法。
- 垃圾收集器吞吐量的提高,尤其是与“年轻”垃圾相关的情况。
- 更好的系统模块描述符版本报告。
- 改进了本机代码的“wait”处理选项。
- Unicode 通用区域设置数据存储库已更新至版本 44。
- 类型注释支持从字节码加载的类型。
- ForkJoinPool 和 ForJoinTasks 现在可以更好地处理不间断任务。
- 配置客户端与服务器 TLS 连接属性的额外灵活性。
- 改进了本机内存跟踪,包括报告峰值使用情况的能力
最后注意:JDK 22 是通过六个月的发布节奏按时交付的 13th 功能版本。由于预期改进源源不断,这种程度的可预测性使开发人员能够轻松管理创新的采用。Oracle 不会为 JDK 22 提供长期支持,在 2023 年 9 月之前提供更新,之后它将被 Oracle JDK 23 取代。最近的长期维护版本是Java 21,更多关于Java新特性的解读和学习欢迎关注《Java 新特性解读》。

欢迎关注我的公众号:程序猿DD。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源
Java 22正式发布,一文了解全部新特性的更多相关文章
- Java知识回顾 (18)Java 8、9、11的新特性
Java 8 Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本. Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持函数式编程,新的 Jav ...
- Java 5 、6、 7中新特性
JDK5新特性(与1.4相比)[转] 1 循环 for (type variable : array){ body} for (type variable : arrayList){body} 而1. ...
- Java单元測试工具JUnit 5新特性一览
Java单元測试工具JUnit 5新特性一览 作者:chszs,未经博主同意不得转载. 经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs JUnit是最流行的开源 ...
- Java Development Kit (JDK) 发展历程 及新特性
SE(J2SE),standard edition,标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE. EE(J2EE),enterprise edition,企业版,使用这 ...
- 一次电话Java面试的问题总结(JDK8新特性、哈希冲突、HashMap原理、线程安全、Linux查询命令、Hadoop节点)
面试涉及问题含有: Java JDK8新特性 集合(哈希冲突.HashMap的原理.自动排序的集合TreeSet) 多线程安全问题 String和StringBuffer JVM 原理.运行流程.内部 ...
- Java 14 令人期待的 5 大新特性,打包工具终于要来了
随着新的 Java 发布生命周期的到来,新版本预计将于 2020 年 3 月发布,本文将对其中的 5 个主要特性作些概述. Java 13刚刚发布给开发人员使用不久,最新版本的JDK于2019年9月发 ...
- Java高效开发IntelliJ IDEA 2019.1 新特性
1. 重构类.文件.符号,Action 搜索 IntelliJ IDEA(以下简称 IDEA) 中的搜索可以分为以下几类 类搜索,比如 Java,Groovy,Scala 等类文件 文件搜索,类文件之 ...
- java都13了, 8的新特性你还没不会用吗
前言 java13都已经来了,很多同学还停留在使用java5的东西.如果在日常开发中没有使用上java8的一些新特性或者不会用.这篇文章对你可能有帮助. lambda表达式 介绍 lambda表达式是 ...
- Java 集合框架之 JDK 1.5 新特性
forEach 循环 多用于元素迭代. 适用范围: - 数组 - 实现 Iterable 接口的集合类 格式: for(类型 变量 : Collection 集合 | 数组) { } 传统 for 和 ...
- 【java】JDK1.8时间日期库 新特性 所有java中时间Date的使用
除了lambda表达式,stream以及几个小的改进之外,Java 8还引入了一套全新的时间日期API,在本篇教程中我们将通过几个简单的任务示例来学习如何使用java 8的这套API.Java对日期, ...
随机推荐
- 【JS】强化Promise理解,从零手写属于自己的Promise.all与Promise.race
壹 ❀ 引 在一个思路搞定三道Promise并发编程题,手摸手教你实现一个Promise限制器一文中,我们在文章结尾留了一个疑问,关于第三题的实现能否解决当每次调用时间都不相等的情况(比如第二次调用要 ...
- NC20313 [SDOI2008]仪仗队
题目链接 题目 题目描述 作为体育委员,C君负责这次运动会仪仗队的训练. 仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队 ...
- NC50390 布局 Layout
题目链接 题目 题目描述 FJ有N头奶牛 \((2 \leq N \leq1000)\) ,编号为 \(1 \ldots N\) .奶牛们将按照编号顺序排成一列队伍(可能有多头奶牛在同一位置上).换句 ...
- React闭包陷阱
React闭包陷阱 React Hooks是React 16.8引入的一个新特性,其出现让React的函数组件也能够拥有状态和生命周期方法,其优势在于可以让我们在不编写类组件的情况下,更细粒度地复用状 ...
- 微信小程序获取本日、本周、本月、本年时间段
原文链接 https://cslaoxu.vip/110.html 说明 最近需要用到统计不同时间段内的记录数,所以找了一下现成的工具类.下面就演示一下如何引用到实际项目中. 详细用法请参考:http ...
- Java控制语句
1.介绍 从本质上讲,程序是一系列指令.控制结构是可以改变我们如何执行这些指令的代码块. 在本教程中,我们将探讨Java中的控制结构. 有三种控制结构: 条件分支,用于在两条或多条路径之间进行选择.J ...
- 教你如何判断Java代码中异步操作是否完成
本文分享自华为云社区<java代码实现异步返回结果如何判断异步执行完成>,作者: 皮牙子抓饭. 在许多应用程序中,我们经常使用异步操作来提高性能和响应度.在Java中,我们可以使用多线程或 ...
- SpringBoot使用令牌桶算法+拦截器+自定义注解+自定义异常实现简单的限流
令牌桶 在高并发的情况下,限流是后端常用的手段之一,可以对系统限流.接口限流.用户限流等,本文就使用令牌桶算法+拦截器+自定义注解+自定义异常实现限流的demo. 令牌桶思想 大小固定的令牌桶可自行以 ...
- vscode中跑go test时打印详细信息配置
1.文件>首选项>设置>搜索Test Flags 2.选择在settings.json中编辑 3.添加以下内容 "go.testFlags":[ "-v ...
- java+mysql实现的公益管理系统
一功能 1.管理员的登录 2.公益项目的增删改查 3.负责人的增删改查 4.捐款人的增删改查 5.志愿者增删改查 二界面展示 1.欢迎界面 2.登录界面 3.系统首页 4.项目管理 5.负责人管理 6 ...