Java JDK 8(1.8)到 26 新特性详解:按版本梳理 + 迁移路线
Java 从 JDK 9 开始进入“半年一个特性版本”的节奏:每个版本都会引入一批语言、库、JVM、工具方面的变化;其中部分版本会成为多数发行版的 LTS(长期支持)。
这篇文章把 JDK 8(1.8)→ 26 按版本逐个梳理,重点讲清:
- 每个版本最值得关注的新特性是什么
- 哪些是 preview/incubator(需要谨慎上生产)
- 从 8 升级到高版本时,建议按哪些里程碑版本迁移
0) 建议的升级路线(从 8 到 26 的“最少跳跃”)
如果你现在还在 8,最常见、风险最低的路线是:
- 8 → 11(LTS):先把模块化时代之前的兼容问题解决(依赖升级、构建链路升级)。
- 11 → 17(LTS):语言特性大幅提升(records、sealed 等)但仍相对稳态。
- 17 → 21(LTS):并发范式变化(虚拟线程)+ 模式匹配完善。
- 21 → 25(LTS):继续收敛 preview API,补齐并发与性能工具链(见 §17-25)。
- 25 → 26(最新):更偏“平台演进与性能/安全治理”,适合追新与验证。
1) 版本速览表(8 → 26)
说明:这张表只列“最能影响日常开发/架构决策”的关键词,不追求穷举。
| 版本 | 是否常见 LTS | 关键词(最值得看) |
|---|---|---|
| 8 | ✅ | Lambda / Stream、java.time、新 HashMap、默认方法 |
| 9 | 模块系统(JPMS)、JShell、jlink、集合工厂方法、Flow | |
| 10 | var(局部类型推断) | |
| 11 | ✅ | 标准 HTTP Client、单文件运行、Flight Recorder、TLS 1.3 |
| 12 | switch 表达式(预览起点) | |
| 13 | Text Blocks(预览起点) | |
| 14 | Records(预览起点)、instanceof 模式匹配(预览起点) | |
| 15 | Sealed Classes(预览起点)、Text Blocks 转正 | |
| 16 | Records 转正、instanceof 模式匹配转正 | |
| 17 | ✅ | Sealed 转正、强封装更严格(迁移常见坑) |
| 18 | 简易 Web Server、UTF-8 默认 | |
| 19 | 虚拟线程(预览起点)、结构化并发(孵化起点) | |
| 20 | 虚拟线程(第 2 次预览) | |
| 21 | ✅ | 虚拟线程转正、switch 模式匹配转正、Sequenced Collections |
| 22 | FFM API 转正、未命名变量/模式、String Templates(预览) | |
| 23 | Markdown JavaDoc、模块 import(预览)、Stream Gatherers(预览) | |
| 24 | Stream Gatherers 转正、Class-File API 转正、结构化并发/Scoped Values 继续预览 | |
| 25 | ✅ | Scoped Values 转正、KDF API、结构化并发继续预览、AOT/JFR 增强 |
| 26 | HTTP/3、移除 Applet、Final 字段完整性治理、G1 吞吐优化 |
2) JDK 8(1.8):现代 Java 的起点
你几乎可以把“Java 8”看成后续一切的基线:
- Lambda / Stream API:函数式写法与并行流。
- 默认方法(default methods):接口演进能力。
- java.time(JSR-310):替代 Date/Calendar。
3) JDK 9:模块系统与工具链进入新时代
关键词:JPMS(Java Platform Module System)
- 解决“巨型 classpath”问题:把 JDK 与应用拆成模块,提升可靠性与可裁剪性。
- 常见影响:反射访问 JDK 内部 API 变难(后续版本还会逐步收紧)。
其他常用:
- JShell:REPL,适合快速验证代码片段。
- jlink:裁剪自定义运行时镜像(减少镜像体积)。
- Flow:响应式流接口(Reactive Streams 风格)。
4) JDK 10:var(局部变量类型推断)
var 让代码更简洁,但本质仍是静态类型:
1 | |
建议:
- 变量名要更“自解释”,否则可读性会下降。
- 不要把
var当成动态类型使用。
5) JDK 11(LTS):工程化能力大升级
最常见的升级落脚点之一。
5.1 标准 HTTP Client
替代旧的 HttpURLConnection,支持 HTTP/2、WebSocket 等:
1 | |
5.2 单文件源代码运行
适合写脚本/小工具:
1 | |
6) JDK 12~15:语法糖集中爆发(建议整体理解)
这几个版本的核心是“让 Java 更适合表达现代业务代码”:
- switch 从语句走向表达式(最终在 14/15 附近成熟,21 完整转正)
- Text Blocks(多行字符串)从预览到转正
- Records/Sealed/模式匹配逐步登场
按版本速记(抓重点):
- JDK 12:switch 表达式进入预览(把 switch 从“语句”推进为“表达式”)
- JDK 13:Text Blocks 进入预览(多行字符串写作体验大幅提升)
- JDK 14:records、
instanceof模式匹配进入预览(数据载体与模式匹配时代开始) - JDK 15:Text Blocks 转正;sealed class 进入预览(更强的领域建模约束)
6.1 switch 表达式(示例)
1 | |
6.2 Text Blocks(示例)
1 | |
7) JDK 14~17:Records / Sealed / 模式匹配走向“可用”
按版本速记(抓重点):
- JDK 16:records 转正、
instanceof模式匹配转正(可以放心在生产使用) - JDK 17(LTS):sealed 转正,并且模块强封装进一步收紧(升级时最容易踩坑的兼容点)
7.1 Records(数据载体)
1 | |
配合解构与模式匹配(后续版本更强),非常适合 DTO/VO、不可变数据结构。
7.2 Sealed Classes(受限继承)
1 | |
用处:更严格的领域建模,配合 switch 模式匹配让分支更可靠。
7.3 JDK 17(LTS)迁移提示
JDK 17 除了语言特性外,最常见的“升级坑”在于:
- 强封装更严格:依赖/框架如果反射访问 JDK 内部实现,可能需要升级版本或加启动参数(尽量避免长期依赖)。
8) JDK 18:开发体验与默认行为调整
常被提到的两个点:
- Simple Web Server:
jwebserver适合本地临时起静态服务器。 - UTF-8 默认:减少跨平台编码差异导致的问题。
9) JDK 19~21:并发范式大转折(虚拟线程)
按版本速记(抓重点):
- JDK 19:虚拟线程进入预览期(建议先在 IO 密集场景试点)
- JDK 20:虚拟线程继续预览迭代(更多库与生态开始适配)
- JDK 21(LTS):虚拟线程转正,配合 Structured Concurrency / Scoped Values 等并发 API 方向继续演进
9.1 虚拟线程(Virtual Threads)
把“每请求一个线程”的模型重新带回到主流,但成本更低(更轻量的调度):
1 | |
9.2 JDK 21(LTS)把虚拟线程转正
JDK 21 也同步完善了模式匹配等语法,让“领域建模 + 分支处理”更自然。
10) JDK 22:FFM 转正、写法更现代
JDK 22 的一个里程碑是:FFM(Foreign Function & Memory)API 转正,让 Java 调用 native library 不再只能靠 JNI(更安全、可维护)。
同时还有不少“写起来更舒服”的语法与 API:
- 未命名变量/未命名模式
_(当你不关心某个变量时更清晰) - Stream Gatherers(预览):允许自定义 Stream 中间操作(JDK 24 转正)
11) JDK 23:文档与语言预览继续推进
JDK 23 的几个标志性点:
- JavaDoc 支持 Markdown(更适合写现代文档)
- 模块 import 声明(预览):更简洁地导入模块导出的包(后续版本推进)
- Stream Gatherers、Class-File API、结构化并发、Scoped Values 等继续预览/迭代
12) JDK 24:Stream Gatherers / Class-File API 转正
JDK 24 在库与工具上很有分量:
- Stream Gatherers(转正):支持自定义 Stream 中间操作
- Class-File API(转正):为字节码解析/生成/变换提供标准 API
- 结构化并发、Scoped Values、Vector API 继续迭代(preview/incubator)
一个“读起来像业务代码”的 Stream Gatherers 示例(概念性):
1 | |
13) JDK 25(LTS):并发与性能工程继续收敛
JDK 25 是新的 LTS,特性列表里非常多是“预览收敛 + 性能工程化”:
- Scoped Values 转正(从 preview 走向稳定)
- Key Derivation Function API(KDF):安全库能力增强
- Structured Concurrency(第 5 次预览):并发代码更易写、易控、易观测
- Compact Object Headers / Generational Shenandoah / JFR 增强:偏 JVM 与性能剖析方向
14) JDK 26:HTTP/3、移除 Applet、Final 字段完整性治理
JDK 26 更像“平台演进版本”:
- HTTP/3(HTTP Client):HTTP Client API 支持 HTTP/3
- Remove the Applet API:彻底移除 Applet API(历史包袱清理)
- Prepare to Make Final Mean Final:对通过深度反射修改
final字段的行为发出警告,为未来更严格的完整性默认值做准备 - G1 GC 吞吐优化、AOT 对象缓存增强:更偏性能工程化
15) 迁移与落地建议(把新特性用对)
15.1 先区分:稳定特性 vs preview/incubator
- 稳定特性:可放心用于生产(例如 records、sealed、虚拟线程在转正版本之后)。
- preview/incubator:强烈建议“先试点再推广”,并关注下一版本可能的 API/语义变化(尤其是并发与 Panama 相关特性)。
15.2 工程实践:从“语法新特性”开始收益最大
对多数业务团队来说,投入产出比最高的一般是:
var、Text Blocks(提升可读性/减少模板代码)- records + sealed + switch 模式匹配(提升领域建模与分支可靠性)
- 虚拟线程(提升吞吐与资源利用,但需要配合线程阻塞点与库兼容性验证)