java新版本-java25学习笔记(一)LTS版本对比和学习路线

发表于 2026-01-06 22:12 1537 字 8 min read

Spring AI学习笔记(四)工具调用和MCPSpring AI学习笔记(三)RAG从文档入库到回答Spring AI学习笔记(二)ChatClient从怎么调到怎么封装Spring AI学习笔记(一)它到底解决什么问题java新版本-java25学习笔记(四)用JFR和GC日志做一次体检java新版本-java25学习笔记(三)虚拟线程要和资源边界一起看java新版本-java25学习笔记(二)运行时基线先统一java新版本-java25学习笔记(一)LTS版本对比和学习路线主流AI Agent能力对比与工程选型我用Kiro做了个自己的工具站盘一盘虚拟线程我用Trae做了个AstrBot的AI角色扮演插件Python初学笔记(六)常用标准库先学这几个Python初学笔记(五)读写文件和处理异常Python初学笔记(四)函数让代码开始有结构Python初学笔记(三)条件、循环和推导式Python初学笔记(二)变量和基础类型比想象中重要Python初学笔记(一)先把环境和运行方式弄明白主流AI大模型能力对比Java 21和Spring Boot 3升级笔记(五)日志指标与可观测性Java 21和Spring Boot 3升级笔记(四)数据访问层适配Java 21和Spring Boot 3升级笔记(三)虚拟线程使用边界Java 21和Spring Boot 3升级笔记(二)Jakarta迁移要点Java 21和Spring Boot 3升级笔记(一)工程基线整理How Can We Tolerate Magic Values! Major Overhaul of JPA Specification!处理生僻字乱码:JPA框架对于Oracle的NVarchar2,NChar,NClob类型支持Redis Stream能不能当轻量消息队列用RocketMQ 5学习笔记:普通消息之外要看什么事件流不是换个消息队列这么简单Kubernetes学习笔记04:发布、排障和观测Kubernetes学习笔记03:配置、密钥和存储Kubernetes学习笔记02:Deployment、Service和IngressKubernetes学习笔记01:Pod和控制器mysql索引原理02--存储引擎索引的实现mysql索引原理01--索引的数据结构
This post is not yet available in English. Showing the original.
  Java 25 已经在 2025 年 9 月 16 日 GA,它是 Java 21 之后的新 LTS 版本。   这几篇文章统一整理成。定位也稍微调整一下:先学习新版本,再判断项目要不要升级。   学习 Java 25 不应该只看“多了几个语法糖”。更实际的问题是:它和 Java 8、11、17、21 这些 LTS...

前言

  Java 25 已经在 2025 年 9 月 16 日 GA,它是 Java 21 之后的新 LTS 版本。

  这几篇文章统一整理成java新版本-java25学习笔记。定位也稍微调整一下:先学习新版本,再判断项目要不要升级。

  学习 Java 25 不应该只看“多了几个语法糖”。更实际的问题是:它和 Java 8、11、17、21 这些 LTS 版本有什么差异?哪些特性已经可以放心学?哪些还只是预览或孵化?一个后端项目应该怎么做练习和验证?

先对比几个 LTS 版本

  Java 的版本节奏很快,但企业项目通常还是围绕 LTS 版本做选择。

版本发布时间适合怎么理解
Java 82014老项目基线,Lambda、Stream、Optional、时间 API 是核心变化
Java 112018第一个新时代 LTS,模块化之后的稳定版本,很多企业从 8 升到这里
Java 172021Spring Boot 3 生态的重要基线,sealed class、record、switch 表达式等逐渐成熟
Java 212023虚拟线程正式可用,Sequenced Collection、Record Patterns 等让现代 Java 写法成型
Java 252025新 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。为了学习方便,我会把它们按使用场景分成几类。

语言和日常编码

  1. JEP 511:Module Import Declarations,可以用import module导入模块导出的包。
  2. JEP 512:Compact Source Files and Instance Main Methods,让小程序和练习代码更简洁。
  3. JEP 513:Flexible Constructor Bodies,构造器里可以在super(...)this(...)调用前写更灵活的初始化逻辑。
  4. JEP 507:Primitive Types in Patterns, instanceof, and switch,还是预览特性,需要--enable-preview

  这部分适合先学。它们最容易写出练习代码,也最容易影响以后团队的编码风格。

并发和上下文

  1. JEP 506:Scoped Values,适合在线程内和子任务之间传递只读上下文。
  2. JEP 502:Stable Values,预览特性,目标是提供比普通延迟初始化更容易优化的稳定值。
  3. JEP 505:Structured Concurrency,第五次预览,适合学习结构化并发模型。
  4. 虚拟线程在 Java 21 已经正式可用,到 Java 25 阶段生态更成熟。

  这部分适合后端开发重点关注。它不只是语法变化,而是会影响接口并发、资源边界、超时治理和链路上下文传递。

JVM、性能和观测

  1. JEP 509:JFR CPU-Time Profiling,实验特性。
  2. JEP 518:JFR Cooperative Sampling。
  3. JEP 520:JFR Method Timing & Tracing。
  4. JEP 514:Ahead-of-Time Command-Line Ergonomics。
  5. JEP 515:Ahead-of-Time Method Profiling。
  6. JEP 519:Compact Object Headers。
  7. JEP 521:Generational Shenandoah。

  这部分更偏运行时。对业务代码来说未必每天都写到,但对升级评估、压测、启动速度、内存占用、GC 和性能分析很重要。

安全和底层能力

  1. JEP 510:Key Derivation Function API。
  2. JEP 470:PEM Encodings of Cryptographic Objects,预览特性。
  3. JEP 508:Vector API,第十次孵化。
  4. 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

  这类练习可以快速把新版本里的现代写法串起来:varrecordList.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~

© 2019 - 2026 VincentHo @VincentHo
Powered by theme astro-koharu · Inspired by Shoka