Java 22正式发布,一文了解全部新特性

news2024/11/15 4:36:00

就在昨晚,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 新特性解读》。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1534559.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

世媒讯软文营销策略如何做才能达到引流的目的

软文营销是一种通过撰写软文来宣传企业、产品或服务的网络营销方式。通过撰写具有故事性、吸引人的文章来间接推广产品、服务或品牌的营销策略。要实现软文营销的目的,即引流(吸引流量),以下是一些有效的策略: 新闻策略…

学点儿Java_Day7_继承、重载、重写、多态、抽象类

1 继承 1.1 概念与理解 继承: 你继承谁你就是谁,继承是一种严格的父子关系(抽取到父类里面的属性和方法一定是所有子类所共有)      (Student继承Person,那么Student就是人) 面向对象特征…

数据结构:初识树和二叉树

目前主流的方式是左孩子右兄弟表示法 我们的文件系统就是一个树 以上就是树的概念,我们今天还要来学习一种从树演变的重要的结构:二叉树 顾名思义二叉树就是一个结点最多有两个子树。 其中我们还要了解满二叉树和完全二叉树的概念 注意我们的完全二叉…

四、C语言中的数组:如何输入与输出二维数组(数组,完)

本章的学习内容如下 四、C语言中的数组:数组的创建与初始化四、C语言中的数组:数组的输入与元素个数C语言—第6次作业—十道代码题掌握一维数组四、C语言中的数组:二维数组 1.二维数组的输入与输出 当我们输入一维数组时需要一个循环来遍历…

10.注册页面

注册页面 在pages中新建页面register 复制粘贴之前的登录页面 设置上传头像图片 微信官方文档 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/userProfile.html <button class"avatar-wrapper" open-type"chooseAvatar&quo…

微调alpaca-lora遇到的一些问题

1、环境简介 环境&#xff1a; 系统&#xff1a;Ubuntu torch&#xff1a;2.2.1 python&#xff1a;3.10 gpu&#xff1a;V100 16g peft&#xff1a;0.9.0 使用PEFT中的lora方式微调llama-2-7b-hf&#xff0c;项目地址&#xff1a;alpaca-lora 2、混合精度训练Tensor相互计算会…

海外重要行业媒体:知名服务商IntoTheBlock现已集成波场TRON网络分析数据

近日,领先链上分析服务提供商 IntoTheBlock 宣布已将波场 TRON 网络集成至其市场情报套件。该合作引发多家海外加密媒体关注,Crypto Slate、Crypto Briefing等均对此进行了报道,称此次合作意义深远,能帮助数百万用户更深入地了解波场TRON生态系统。 报道表示,波场TRON网络规模大…

中文编程入门(Lua5.4.6中文版)第十一章 Lua 模块与包 参考星争际霸游戏

在遥远的星争际霸世界中&#xff0c;代码模块就如同星际基地中的高科技仓库&#xff0c;储存着各类经过封装优化的战术指令和战略资源。自Lua 5.1版本起&#xff0c;星际编程者们引入了标准化的模块管理系统&#xff0c;使得不同战舰之间能够共享和调用核心战斗算法&#xff0c…

Linux-网络层IP协议、链路层以太网协议解析

目录 网络层&#xff1a;IP协议地址管理路由选择 链路层 网络层&#xff1a; 网络层&#xff1a;负责地址管理与路由选择 — IP协议&#xff0c;地址管理&#xff0c;路由选择 IP协议 数据格式&#xff1a; 4位协议版本&#xff1a;4-ipv4协议版本 4位首部长度&#xff1a;以…

Redis实战:缓存穿透及其解决思路 实战演示

&#x1f389;&#x1f389;欢迎光临&#xff0c;终于等到你啦&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;持续更新的专栏Redis实战与进阶 本专栏讲解Redis从原理到实践 …

Python爬虫框架大比拼!从小爬虫到大数据采集|电商大数据采集API接口

在互联网时代&#xff0c;数据是无处不在的黄金。无论你是寻找小规模的数据采集任务还是大规模的网络爬虫项目&#xff0c;Python提供了丰富的爬虫框架供你选择。对于小型爬虫需求&#xff0c;你可能会喜欢使用requests库和Beautiful Soup(bs4库)这样的基本工具&#xff0c;它们…

想当初级爬虫工程师,需要把爬虫学到什么程度?

这篇文章会说说我自己的心得体验&#xff0c;关于爬虫、关于工作&#xff0c;仅供参考。 学到哪种程度 暂且把目标定位初级爬虫工程师&#xff0c;简单列一下吧&#xff1a; &#xff08;必要部分&#xff09; 语言选择&#xff1a;一般是了解Python、Java、Golang之一 熟悉…

C#操作像素替换图片中的指定颜色

待处理的图片&#xff0c;其特征是包含有限数量颜色&#xff0c;不同的颜色相互交叉使用&#xff0c;相同颜色并未完全连贯&#xff0c;需要将图片中的指定颜色替换为另一颜色。虽然很多图片处理工具都支持类似操作&#xff0c;最后还是自己动手编写简单的处理程序。   程序的…

尚硅谷SQL|数据库的创建,修改与删除

DDL&#xff1a;创建和管理表 DDL所有的操作都要慎重&#xff0c;尤其是删除&#xff0c;清空等。 创建数据库--->确认字段--->创建数据表---->插入数据 创建数据库 1.创建数据库&#xff1a;推荐使用方式3 #创建数据库 #方式1,使用的是默认字符集 create databa…

24计算机考研调剂 | (研究所)北京微电子技术研究所

北京微电子技术研究所2024年考研调剂信息 调剂信息 一、招生专业 二、调剂对象 统考科目为思想政治理论、英语&#xff08;一&#xff09;、数学&#xff08;一&#xff09;&#xff1b;本科为电子科学与技术、微电子学、集成电路设计、电子信息工程、通信工程、计算机科学与…

有关Theano和PyTensor库

根据Github里面的介绍&#xff0c;PyTensor是源于Theano&#xff0c; Theano目前应该已经不再开发了&#xff0c;更新都是很多年前。 因此PyTensor在背景介绍中说 PyTensor is a fork of Aesara, which is a fork of Theano. Theano和PyTensor都是计算相关的库&#xff0c;可以…

报数游戏-第12届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第39讲。 报数游戏&#xf…

VMware 替代专题 | 浅析 VMware 与 SmartX 超融合 I/O 路径差异及其影响

不同的超融合软件&#xff0c;其读写机制有一定的差异性&#xff0c;I/O 路径也不尽相同&#xff0c;这使得他们在 I/O 读写效率以及资源占用上都有不同的表现。有兴趣着手构建超融合基础架构的用户&#xff0c;可能会希望了解更多关于 I/O 路径的细节&#xff0c;从而在实施之…

智能商品计划系统:鞋服品牌的未来价值引擎

在数字化浪潮席卷全球的今天&#xff0c;智能商品计划系统正成为鞋服品牌转型升级的重要引擎。那么&#xff0c;什么是智能商品计划系统&#xff1f;它又能给鞋服品牌带来怎样的价值&#xff1f;本文将深入探讨这一话题&#xff0c;为鞋服品牌企业指引方向。 智能商品计划系统…

京东云开发者:DDD 学习与感悟 —— 向屎山冲锋

原文地址:https://mp.weixin.qq.com/s/Hvq1ttBopbxypatVcKcLiA 软件系统是通过软件开发来解决某一个业务领域或问题单元而产生的一个交付物。而通过软件设计可以帮助我们开发出更加健壮的软件系统。因此&#xff0c;软件设计是从业务领域到软件开发之间的桥梁。而DDD是软件设计…