Java JDK 8(1.8)到 26 新特性详解:按版本梳理 + 迁移路线

Java 从 JDK 9 开始进入“半年一个特性版本”的节奏:每个版本都会引入一批语言、库、JVM、工具方面的变化;其中部分版本会成为多数发行版的 LTS(长期支持)

这篇文章把 JDK 8(1.8)→ 26 按版本逐个梳理,重点讲清:

  • 每个版本最值得关注的新特性是什么
  • 哪些是 preview/incubator(需要谨慎上生产)
  • 从 8 升级到高版本时,建议按哪些里程碑版本迁移

0) 建议的升级路线(从 8 到 26 的“最少跳跃”)

如果你现在还在 8,最常见、风险最低的路线是:

  1. 8 → 11(LTS):先把模块化时代之前的兼容问题解决(依赖升级、构建链路升级)。
  2. 11 → 17(LTS):语言特性大幅提升(records、sealed 等)但仍相对稳态。
  3. 17 → 21(LTS):并发范式变化(虚拟线程)+ 模式匹配完善。
  4. 21 → 25(LTS):继续收敛 preview API,补齐并发与性能工具链(见 §17-25)。
  5. 25 → 26(最新):更偏“平台演进与性能/安全治理”,适合追新与验证。

1) 版本速览表(8 → 26)

说明:这张表只列“最能影响日常开发/架构决策”的关键词,不追求穷举。

版本是否常见 LTS关键词(最值得看)
8Lambda / Stream、java.time、新 HashMap、默认方法
9模块系统(JPMS)、JShell、jlink、集合工厂方法、Flow
10var(局部类型推断)
11标准 HTTP Client、单文件运行、Flight Recorder、TLS 1.3
12switch 表达式(预览起点)
13Text Blocks(预览起点)
14Records(预览起点)、instanceof 模式匹配(预览起点)
15Sealed Classes(预览起点)、Text Blocks 转正
16Records 转正、instanceof 模式匹配转正
17Sealed 转正、强封装更严格(迁移常见坑)
18简易 Web Server、UTF-8 默认
19虚拟线程(预览起点)、结构化并发(孵化起点)
20虚拟线程(第 2 次预览)
21虚拟线程转正、switch 模式匹配转正、Sequenced Collections
22FFM API 转正、未命名变量/模式、String Templates(预览)
23Markdown JavaDoc、模块 import(预览)、Stream Gatherers(预览)
24Stream Gatherers 转正、Class-File API 转正、结构化并发/Scoped Values 继续预览
25Scoped Values 转正、KDF API、结构化并发继续预览、AOT/JFR 增强
26HTTP/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
2
3
4
var list = java.util.List.of("a", "b");
for (var s : list) {
System.out.println(s.toUpperCase());
}

建议:

  • 变量名要更“自解释”,否则可读性会下降。
  • 不要把 var 当成动态类型使用。

5) JDK 11(LTS):工程化能力大升级

最常见的升级落脚点之一。

5.1 标准 HTTP Client

替代旧的 HttpURLConnection,支持 HTTP/2、WebSocket 等:

1
2
3
4
5
6
7
8
var client = java.net.http.HttpClient.newHttpClient();
var req = java.net.http.HttpRequest.newBuilder()
.uri(java.net.URI.create("https://example.com"))
.GET()
.build();

var resp = client.send(req, java.net.http.HttpResponse.BodyHandlers.ofString());
System.out.println(resp.statusCode());

5.2 单文件源代码运行

适合写脚本/小工具:

1
java Hello.java

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
2
3
4
5
6
7
String level = "WARN";
int code = switch (level) {
case "INFO" -> 1;
case "WARN" -> 2;
case "ERROR" -> 3;
default -> 0;
};

6.2 Text Blocks(示例)

1
2
3
4
5
6
String json = """
{
"name": "pcboy",
"lang": "Java"
}
""";

7) JDK 14~17:Records / Sealed / 模式匹配走向“可用”

按版本速记(抓重点):

  • JDK 16:records 转正、instanceof 模式匹配转正(可以放心在生产使用)
  • JDK 17(LTS):sealed 转正,并且模块强封装进一步收紧(升级时最容易踩坑的兼容点)

7.1 Records(数据载体)

1
public record User(long id, String name) {}

配合解构与模式匹配(后续版本更强),非常适合 DTO/VO、不可变数据结构。

7.2 Sealed Classes(受限继承)

1
2
3
public sealed interface Shape permits Circle, Rect {}
public record Circle(double r) implements Shape {}
public record Rect(double w, double h) implements Shape {}

用处:更严格的领域建模,配合 switch 模式匹配让分支更可靠。

7.3 JDK 17(LTS)迁移提示

JDK 17 除了语言特性外,最常见的“升级坑”在于:

  • 强封装更严格:依赖/框架如果反射访问 JDK 内部实现,可能需要升级版本或加启动参数(尽量避免长期依赖)。

8) JDK 18:开发体验与默认行为调整

常被提到的两个点:

  • Simple Web Serverjwebserver 适合本地临时起静态服务器。
  • UTF-8 默认:减少跨平台编码差异导致的问题。

9) JDK 19~21:并发范式大转折(虚拟线程)

按版本速记(抓重点):

  • JDK 19:虚拟线程进入预览期(建议先在 IO 密集场景试点)
  • JDK 20:虚拟线程继续预览迭代(更多库与生态开始适配)
  • JDK 21(LTS):虚拟线程转正,配合 Structured Concurrency / Scoped Values 等并发 API 方向继续演进

9.1 虚拟线程(Virtual Threads)

把“每请求一个线程”的模型重新带回到主流,但成本更低(更轻量的调度):

1
2
3
4
5
try (var executor = java.util.concurrent.Executors.newVirtualThreadPerTaskExecutor()) {
var f1 = executor.submit(() -> "A");
var f2 = executor.submit(() -> "B");
System.out.println(f1.get() + f2.get());
}

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
2
3
4
// 伪代码风格:表达“自定义 gatherer”作为中间操作的意图
// 实际 API 以 JDK 24 Stream Gatherers 为准
// 思路:把流水线中某段复杂转换封装成一个可复用的 gatherer
var out = stream.gather(myGatherer()).toList();

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 模式匹配(提升领域建模与分支可靠性)
  • 虚拟线程(提升吞吐与资源利用,但需要配合线程阻塞点与库兼容性验证)

参考资料


Java JDK 8(1.8)到 26 新特性详解:按版本梳理 + 迁移路线
https://www.pcboy.com.cn/2026/06/07/Java-JDK8-到26-新特性详解/
作者
chituer
发布于
2026年6月7日
许可协议