Java 22 震撼发布,全新特性一网打尽!快来了解一下吧!

352 阅读10分钟

说在前面

Oracle 刚刚放出了 JDK 22 的大招,这次更新可是带来了整整 12 项新特性哦!这些特性大概可以分为四大类:核心 Java 库、Java 语言规范、HotSpot,还有 Java 工具。看来 Oracle 这次是真的下了血本,连 Visual Studio Code (VS Code) 的支持都给改进了,摆明了就是要吸引新开发人员的目光嘛。

JDK 22 算是个特性版本,Oracle 会给它提供 6 个月的支持,直到下一个特性版本出炉。不过要是 LTS 版本(比如 JDK 21)的话,那支持时间可就长达 8 年了哦。下一个 LTS 版本是 Java 25,预计要在 2025 年 9 月才会跟大家见面呢。

Oracle 这次可是自信满满地宣称 Java 是“当今科技趋势的排名第一语言”,还说它是“排名第一的企业/IT 组织使用语言”。据 Oracle 自己透露,现在可是有 630 亿个活跃的 Java 虚拟机 (JVM) 和 410 亿个云上的 JVM 在跑着呢。

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。 这是大佬写的, 7701页的BAT大佬写的刷题笔记,让我offer拿到手软

正文

这次更新的 12 项新特性里,有六个是归在核心 Java 库下面的:

  • JEP 454:外部函数和内存 API,让你能更轻松地调用外部函数和管理内存;
  • JEP 457:类文件 API(预览版),让你能更方便地处理类文件;
  • JEP 460:向量 API(第七轮孵化),让你的向量运算更加高效;
  • JEP 461:流聚合器(预览版),让你的流处理更加灵活;
  • JEP 462:结构化并发(第二轮预览),让你的并发编程更加有序;
  • JEP 464:作用域值(第二轮预览),让你的变量作用域更加清晰。

还有四个新特性是归在 Java 语言规范下面的:

  • JEP 447:super(...) 前导语句(预览版),让你在调用父类构造方法之前能执行其他语句;
  • JEP 456:未命名变量和模式,让你的代码更加简洁易读;
  • JEP 459:字符串模板(第二轮预览),让你的字符串拼接更加优雅;
  • JEP 463:隐式声明类和实例主方法(第二轮预览),让你的类和实例方法声明更加简洁。

另外,还有一个新特性是归在 HotSpot 下面的:

  • JEP 423:G1 的区域锚定,让你的垃圾回收更加高效。

最后,还有一个新特性是归在 Java 工具下面的:

  • JEP 458:启动多文件源码程序,让你能更加方便地运行多个源文件的程序。

这些新特性都被归类到了四个主要的 Java 项目里:Amber、Loom、Panama 和 Valhalla。这四个项目可是 Oracle 的亲儿子,专门负责孵化一系列组件,最后整合到 JDK 里去的。看来这次 JDK 22 的更新,就是这四个项目精心策划的大餐啊!

Amber 项目

JEP 463:隐式声明类和实例主方法

JEP 463 这个小东西,之前可是有不少名字呢,像什么“隐式声明类和实例主方法”、“未命名类和实例主方法”,还有“灵活主方法和匿名主类”等等。现在它终于定下来了,就叫“隐式声明类和实例主方法”,而且已经是第二轮预览了!

这个 JEP 可是对之前那个预览版 JEP 445 的大升级。它听取了大家的反馈,做了不少改进。说白了,这个 JEP 就是想让 Java 语言更容易上手,让那些刚开始学编程的学生们能够更轻松地写出他们的第一个程序,而不用去理解那些为大型程序设计的复杂特性。

Java 语言的架构师 Brian Goetz 在 2022 年 9 月还写了一篇博客文章,叫做“Paving the on-ramp”,就是给这个 JEP 预热。现在,甲骨文的技术顾问 Gavin Bierman 也已经发布了规范文档的初稿,让大家来提提意见。

JEP463.png

JEP 459 字符串模板

JEP 459,也就是字符串模板的第二轮预览来啦!这个特性其实就是在 JDK 21 里的 JEP 430 基础上,又做了一次预览。字符串模板这个东东,就是让你在字符串里嵌入一些表达式,然后这些表达式在运行时就会被解释、计算和校验。简单来说,就是让你的字符串能更灵活地展示动态内容啦!

String name = "World";  
int age = 42;  
  
// 使用字符串模板  
String greeting = $"Hello, {name}! You are {age} years old.";  
  
System.out.println(greeting);  
// 输出: Hello, World! You are 42 years old.

JEP456 未命名变量和模式(Unnamed Variables & Patterns)

JEP 456 这个提案啊,就是想让 Java 语言更灵活一些。

它提议加入“未命名变量”和“模式”这两个新特性,其实就是在 JDK 21 里的那个 JEP 443 基础上,进一步确定和完善这些功能。

简单来说呢,“未命名模式”就是让你在匹配记录组件的时候,不用非得给每个组件都起个名字和指定类型。而“未命名变量”则是让你声明一个变量,但又不打算用它的时候,可以更方便地处理。这两个新特性都用下划线字符来表示。

比如 r instanceof _(int x, int y) 和 r instanceof _ 这样的写法。

JEP 447 super(...) 前导语句(Statements before super(...))

JEP 447 提案,主要是想让 Java 构造函数里的代码更灵活一些。

现在的情况是,在调用 this() 或 super() 之前,我们不能在构造函数里写那些和正在创建的实例无关的代码。但这个提案就建议说,咱们能不能放宽这个限制呢?让我们在这些调用之前也能写点其他的语句。

当然啦,这个提案也保证了现有的安全性和初始化要求都不会受到影响。Bierman 大神已经给出了这个特性的初步规范,让大家来提提意见,看看有没有什么需要改进的地方。所以,如果你对这个提案感兴趣,或者有什么想法和建议,不妨去看看那个规范,然后给 Java 社区反馈一下吧!

Loom 项目

JEP464 作用域值(Scoped Values)

JEP 464 提案,其实就是想要让我们在 Java 里能更方便地共享不可变数据。

这个提案以前被称为“范围局部变量”,但现在叫做“作用域值”。它提议在 JDK 22 中进行第二轮预览,跟前一轮预览一样,不做任何改动,就是为了多收集一些开发者的使用经验和反馈。这个特性比 thread-local 变量更好用,特别是在我们使用大量虚拟线程的时候。

JEP462 结构化并发(Structured Concurrency)

再来说说 JEP 462 吧,这个提案是关于“结构化并发”的。它也准备进行第二轮预览,同样不做任何变更,就是为了多听听开发者的意见。结构化并发这个特性啊,可以让我们把在不同线程中运行的相关任务组看成一个整体来处理。这样一来,错误处理和任务取消就变得简单多了,程序的可靠性和可观测性也会得到提高。这对于我们这些开发者来说,可是个大好事儿啊!

Panama 项目

JEP460 Vector API(第七轮孵化)

Vector API这个特性已经进入第七轮孵化了,真的是一步一个脚印走过来的呢。它吸收了前面六轮孵化的反馈,不断地改进和完善。

说起这个Vector API,它的成长历程可不简单,从JDK 16开始就以孵化器模块的身份出现,然后经历了JDK 17、18、19、20、21的好几轮孵化,现在终于要破壳而出了。

在JDK 21的时候,Vector API迈出了重要的一步,JEP 448对其做了重大改进,包括对JVM编译器接口(JVMCI)进行了增强,让它能更好地支持Vector API的值。

这可是一项大工程啊,相当于给JVMCI换了套新衣服,让它更适应现代编程的需求。

现在,这个Vector API已经准备好接受更广泛的测试和使用了。如果你对高性能计算感兴趣,或者想要让你的代码跑得更快、更顺畅,那就赶紧来试试吧!

别忘了,它还在孵化中哦,有什么问题和建议就尽管提,让我们一起把它变得更强大吧!

JEP454 外部函数和内存 API(Foreign Function & Memory API)

JEP 454,也就是外部函数和内存API,在经历了两轮孵化和三轮预览之后,终于要跟大家见面了!这一路走来,它可是经历了不少波折呢。从JDK 17开始,它就一直在不断地改进和完善,经历了孵化器、第二轮孵化、预览、第二轮预览和第三轮预览等多个阶段。

在这个过程中,开发团队可是下了不少功夫。他们添加了新的Enable-Native-Access manifest属性,这样可执行JAR包中的代码就能调用受限制的方法了,而且还不需要使用--enable-native-access标志,真是太方便了!

不仅如此,他们还让客户端能够通过编程的方式构建C函数描述符,避免了使用特定于平台的常量,这样一来,代码就更加灵活和可移植了。

而且,对本地内存中可变长度数组的支持也得到了改进,现在使用起来更加顺畅了。最厉害的是,它还支持多字符集本地字符串,这对于处理不同语言的文本数据来说,简直就是一个神器啊!

总之,JEP 454这个外部函数和内存API,在经历了这么多轮的孵化和预览之后,已经变得越来越成熟和完善了。如果你想要让你的代码更加高效、灵活和强大,那就赶紧来试试吧!

最后说一句(求关注,求赞,别白嫖我)

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。 这是大佬写的, 7701页的BAT大佬写的刷题笔记,让我offer拿到手软

项目文档&视频:

开源:项目文档 & 视频 Github-Doc 本文,已收录于,我的技术网站 aijiangsir.com,有大厂完整面经,工作技术,架构师成长之路,等经验分享

求一键三连:点赞、分享、收藏

点赞对我真的非常重要!在线求赞,加个关注我会非常感激!