首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >《Java 演进之路》系列 · 第 18 篇

《Java 演进之路》系列 · 第 18 篇

作者头像
DevLlama
发布2026-06-01 20:17:05
发布2026-06-01 20:17:05
1040
举报

Java 22 发布:小修小补,但很对味

写了一段用 jpackage 打包的脚本,顺手加了个 macOS .dmg 输出——那一刻我觉得,Java 越来越好用了。

2024 年 3 月 19 日,JDK 22 正式发布。作为 JDK 21 这个 LTS 版本之后的第一个短期版本,它的生命周期只有半年。很多人会觉得这种只有半年生命周期的临时版本,没有太大的用处。但是我觉得:正是因为它们,后续的LTS版本才能伟大。它也代表了 Java 社区正在认真在为开发者考虑开发体验

虽然这次更新没有虚拟线程那么大的更新,也没有 LTS 的光环,JDK 22 的改进都藏在细节里:一个能省掉无用参数的 _,一个更安全的字符串插值机制,还有打包工具的小升级。这些改动不大,但用起来就是舒服。

JDK 22 官方特性总览

所有特性均基于 JSR 397(《Java SE 22 发布规范》)。作为一个典型的短期版本,它主要聚焦:

  • 1.语言表达力微调:让 Lambda 表达式能忽略无用参数,支持更简洁的单文件程序启动。
  • 2.底层能力持续孵化:FFM API 正式毕业,Vector API 和结构化并发继续演进。
  • 3.开发者工具链补强:从应用打包到字符支持,解决实际工程问题。

1. 匿名变量 _(预览,JEP 456)

这个特性解决了一个我忍了很久的小问题:Lambda 表达式的参数根本用不到,却不得不命名

比如注册一个定时任务,我只关心执行逻辑,不关心 TimerTask 对象:

代码语言:javascript
复制
// 以前
timer.schedule(new TimerTask() {
    public void run() { log("tick"); }
}, delay);

// 用 Lambda
timer.schedule(t -> log("tick"), delay); // t 是个摆设

// 现在
timer.schedule(_ -> log("tick"), delay); // 清晰表明“我不需要这个参数”

_ 的引入,不只是省了几个字母,更是显式表达了意图。看到 _,你就知道这部分信息无关紧要。当然,规则也很明确:不能和命名参数混用,避免混淆。

💡 注意:该特性在 JDK 22 中处于预览阶段,需使用 --enable-preview 编译和运行。

2. FFM API 正式发布(JEP 454)

这是 JDK 22 里我最想强调的一点:Foreign Function & Memory API 终于毕业了

从 JDK 19 开始,它经历了三轮孵化,现在在 JDK 22 中成为标准 Java API。这意味着,我们有了一个安全、高效、纯 Java 的方式来调用本地代码(C/C++ 库)和操作堆外内存,而不再需要依赖脆弱且复杂的 JNI。

虽然我自己写 Web 服务时很少直接用到它,但它的正式发布意义重大。数据库驱动、机器学习框架、游戏引擎等需要与本地库深度交互的领域,从此有了一个现代化、高性能的官方解决方案。JNI 的漫长统治,终于看到了被取代的曙光。

3. 字符串模板(第二次预览,JEP 459)

JDK 22 带来了更安全、更灵活的字符串插值机制——String Templates

传统字符串拼接容易出错,而 String.format 又冗长。现在你可以这样写:

代码语言:javascript
复制
// 预览特性,需启用 --enable-preview
String name = "Alice";
int age = 30;
String message = STR."Hello, \{name}! You are \{age} years old.";

更强大的是,它支持自定义处理器。例如,安全地构建 SQL 查询:

代码语言:javascript
复制
PreparedStatement ps = DB."SELECT * FROM users WHERE id = \{userId}";

这里的 DB 处理器可以自动转义输入,防止 SQL 注入。这不仅是语法糖,更是安全编程的新范式

🧩 为什么关注 JDK 22?

  • 短期版本的价值体现:它证明 Java 的快速发布模型有效——LTS 负责稳定交付,短期版负责敏捷试错。
  • 开发者体验优先:匿名变量 _ 和字符串模板虽小,却能显著减少样板代码,提升可读性与安全性。
  • 生态持续现代化:从 Unicode 15.1 到 jpackage 增强,Java 依然在认真维护整个开发生命周期。

🧱 其他重要更新

  • Vector API(第七孵化器,JEP 460):继续优化 SIMD 向量化性能,为 AI/科学计算铺路。
  • 隐式主类和实例 main 方法(第二预览,JEP 463):可直接写 void main() { ... },省掉类声明,适合脚本或教学。
  • 结构化并发(第二预览,JEP 462):简化多线程编程模型,确保子任务生命周期严格嵌套于父作用域,避免线程泄漏,提升可维护性与可观测性。
  • jpackage 增强:支持生成 macOS .dmg 安装包,Windows 安装程序自定义能力也更强(注:此为工具链改进,未列为独立 JEP)。
  • Unicode 15.1 支持:JDK 22 升级了底层 Unicode 数据至 15.1 版本,新增对最新 emoji 和书写系统的支持(注:此为平台常规更新,未通过独立 JEP 提案)。
  • Class-File API(预览,JEP 457):提供标准方式读写 class 文件,替代 ASM 等第三方库。

✅ 总结

JDK 22 通过 JSR 397,完成了一次典型的“润物细无声”式迭代。它没有颠覆性创新,却在语言表达力、工具链和底层能力上做了大量扎实的打磨。匿名变量 _ 让代码更简洁,字符串模板让插值更安全,FFM API 的正式发布则为系统级编程打开新大门。这些看似微小的改进,累积起来就是日常开发体验的质变。作为 JDK 21 的直接后继者,JDK 22 再次证明:Java 的演进,不仅是关于性能和并发,更是关于如何让每一位开发者写代码时,感觉更自然、更顺手

📢 延伸阅读

  • • JSR 397: Java SE 22 规范[1]
  • • OpenJDK JDK 22 官方页面[2]
  • • JEP 456: Unnamed Variables & Patterns (Preview)[3]
  • • JEP 459: String Templates (Second Preview)[4]
  • • JEP 454: Foreign Function & Memory API[5]
引用链接

[1] JSR 397: Java SE 22 规范: https://www.jcp.org/en/jsr/detail?id=397 [2] OpenJDK JDK 22 官方页面: https://openjdk.org/projects/jdk/22/ [3] JEP 456: Unnamed Variables & Patterns (Preview): https://openjdk.org/jeps/456 [4] JEP 459: String Templates (Second Preview): https://openjdk.org/jeps/459 [5] JEP 454: Foreign Function & Memory API: https://openjdk.org/jeps/454

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevLlama 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java 22 发布:小修小补,但很对味
  • JDK 22 官方特性总览
    • 1. 匿名变量 _(预览,JEP 456)
    • 2. FFM API 正式发布(JEP 454)
    • 3. 字符串模板(第二次预览,JEP 459)
  • 🧩 为什么关注 JDK 22?
  • 🧱 其他重要更新
  • ✅ 总结
  • 📢 延伸阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档