前言
Java 25 已经在 2025 年 9 月 16 日 GA,它是 Java 21 之后的新 LTS 版本。
这几篇文章统一整理成java新版本-java25学习笔记。定位也稍微调整一下:先学习新版本,再判断项目要不要升级。
学习 Java 25 不应该只看“多了几个语法糖”。更实际的问题是:它和 Java 8、11、17、21 这些 LTS 版本有什么差异?哪些特性已经可以放心学?哪些还只是预览或孵化?一个后端项目应该怎么做练习和验证?
先对比几个 LTS 版本
Java 的版本节奏很快,但企业项目通常还是围绕 LTS 版本做选择。
| 版本 | 发布时间 | 适合怎么理解 |
|---|---|---|
| Java 8 | 2014 | 老项目基线,Lambda、Stream、Optional、时间 API 是核心变化 |
| Java 11 | 2018 | 第一个新时代 LTS,模块化之后的稳定版本,很多企业从 8 升到这里 |
| Java 17 | 2021 | Spring Boot 3 生态的重要基线,sealed class、record、switch 表达式等逐渐成熟 |
| Java 21 | 2023 | 虚拟线程正式可用,Sequenced Collection、Record Patterns 等让现代 Java 写法成型 |
| Java 25 | 2025 | 新 LTS,继续补齐语言、运行时、JFR、AOT、GC 和安全能力 |
如果项目还在 Java 8,直接跳 Java 25 会有点猛。编译、依赖、框架、JVM 参数、容器镜像都可能一起出问题。
如果项目已经在 Java 17 或 21,学习 Java 25 就自然很多。尤其是 Java 21 到 Java 25 之间,很多变化更像是“把现代 Java 的体验继续补完整”。
Java 25 主要新特性怎么分组
OpenJDK 的 JDK 25 页面列出了 Java 25 集成的 JEP。为了学习方便,我会把它们按使用场景分成几类。
语言和日常编码
JEP 511:Module Import Declarations,可以用import module导入模块导出的包。JEP 512:Compact Source Files and Instance Main Methods,让小程序和练习代码更简洁。JEP 513:Flexible Constructor Bodies,构造器里可以在super(...)或this(...)调用前写更灵活的初始化逻辑。JEP 507:Primitive Types in Patterns, instanceof, and switch,还是预览特性,需要--enable-preview。
这部分适合先学。它们最容易写出练习代码,也最容易影响以后团队的编码风格。
并发和上下文
JEP 506:Scoped Values,适合在线程内和子任务之间传递只读上下文。JEP 502:Stable Values,预览特性,目标是提供比普通延迟初始化更容易优化的稳定值。JEP 505:Structured Concurrency,第五次预览,适合学习结构化并发模型。- 虚拟线程在 Java 21 已经正式可用,到 Java 25 阶段生态更成熟。
这部分适合后端开发重点关注。它不只是语法变化,而是会影响接口并发、资源边界、超时治理和链路上下文传递。
JVM、性能和观测
JEP 509:JFR CPU-Time Profiling,实验特性。JEP 518:JFR Cooperative Sampling。JEP 520:JFR Method Timing & Tracing。JEP 514:Ahead-of-Time Command-Line Ergonomics。JEP 515:Ahead-of-Time Method Profiling。JEP 519:Compact Object Headers。JEP 521:Generational Shenandoah。
这部分更偏运行时。对业务代码来说未必每天都写到,但对升级评估、压测、启动速度、内存占用、GC 和性能分析很重要。
安全和底层能力
JEP 510:Key Derivation Function API。JEP 470:PEM Encodings of Cryptographic Objects,预览特性。JEP 508:Vector API,第十次孵化。JEP 503:移除 32 位 x86 Port。
这些特性不是每个项目都会直接用,但如果项目涉及加密、证书、向量计算或老旧部署环境,就需要关注。
正式、预览、孵化要分清
学习 Java 25 时一定要区分三件事。
正式特性可以作为正常学习内容。比如 Compact Source Files、Instance Main Methods、Scoped Values、Module Import Declarations、Flexible Constructor Bodies。
预览特性需要编译和运行时开启--enable-preview。它适合学习和实验,不建议在核心生产代码里大规模使用。
孵化模块说明 API 仍然在演进。比如 Vector API 很有价值,但项目里使用时要接受未来 API 变化的成本。
这也是为什么我更倾向先写学习笔记,而不是直接写“生产升级指南”。先知道哪些东西成熟,后面才能决定怎么落地。
第一个 Java 25 小练习
Java 25 很适合从小文件开始练。
新建hello.java:
void main() {
System.out.println("Hello Java 25");
System.out.println("先从一个不用 public class 的小程序开始");
}
运行:
java hello.java
这个练习用到了 Compact Source Files 和 Instance Main Methods。它的意义不是替代大型项目结构,而是让学习、脚本、小工具、演示代码更轻。
再写一个简单的 record 练习:
import java.util.List;
record User(String name, int age) {}
void main() {
var users = List.of(
new User("vincent", 18),
new User("java25", 25)
);
users.stream()
.filter(user -> user.age() >= 18)
.forEach(user -> System.out.println(user.name()));
}
运行:
java user-demo.java
这类练习可以快速把新版本里的现代写法串起来:var、record、List.of、Stream、小文件运行。
学习路线
我准备按这个顺序看 Java 25。
第一步,看 LTS 版本差异。先知道 Java 8、11、17、21、25 分别解决了什么问题。
第二步,练语言特性。重点看小文件程序、实例 main、模块导入、构造器变化、模式匹配。
第三步,练并发能力。重点看虚拟线程、Scoped Value、结构化并发。
第四步,看运行时。重点看 JFR、GC 日志、AOT、对象头、启动和内存。
第五步,再回到项目升级。检查 JDK、Maven、插件、Docker、Agent、依赖和测试。
小结
Java 25 作为新 LTS,值得学习,但不应该只把它看成“下一个可升级版本”。
对个人学习来说,可以先从小程序、新语法、并发模型和 JFR 练习开始。对团队项目来说,要先对比当前 LTS 基线,再决定升级路线。
后面几篇会继续围绕java新版本-java25学习笔记展开:运行时基线、虚拟线程和资源边界、JFR 与 GC 练习。
If you enjoyed this, leave a comment~