一、JDK 8(2014,Java 里程碑版本)
核心新特性:
-
Lambda 表达式:支持函数式编程,简化集合、流处理代码
List
names = Arrays.asList("John", "Jane", "Jack");
names.forEach(name -> System.out.println(name)); -
Stream API:声明式处理集合数据流,减少手动迭代代码
List
numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream().filter(n -> n > 2).forEach(System.out::println); -
接口默认方法:接口可带实现方法,接口升级不破坏旧实现
interface MyInterface {
default void sayHello() {
System.out.println("Hello, World!");
}
} -
Optional 类:用于规避空指针异常
Optional
optional = Optional.ofNullable(getName());
optional.ifPresent(System.out::println);
JDK8 稳定性强,大量企业生产环境仍在使用。
二、JDK 11(2018,LTS 长期支持版)
核心新特性:
-
局部变量类型推断 var:简化局部变量声明
var list = new ArrayList
(); -
标准化 HttpClient API:便捷发送 HTTP 请求
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.build();
HttpResponseresponse = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); -
String 新增工具方法 :
isBlank()、strip()、lines()等String text = " Hello ";
System.out.println(text.strip()); // "Hello" -
ZGC 低延迟垃圾回收器:适配大内存应用,降低 GC 暂停时间
移除 JavaFX、CORBA 等模块,JDK 体积精简。
三、JDK 17(2021,LTS 长期支持版)
核心新特性:
-
密封类 Sealed Classes:限制类的继承范围
public abstract sealed class Shape permits Circle, Square { }
public final class Circle extends Shape { }
public final class Square extends Shape { } -
Record 记录类:快速定义不可变数据类,自动生成构造器、equals、hashCode、toString
public record Point(int x, int y) {}
-
Switch 表达式:switch 可返回结果,语法简化
int result = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
default -> 0;
}; -
增强伪随机数生成器:提供更多随机算法
四、JDK 21(2023,LTS 长期支持版)
核心新特性:
-
虚拟线程 Project Loom:轻量级线程,支持百万级线程,降低并发开销
Thread.startVirtualThread(() -> {
System.out.println("Running in a virtual thread");
}); -
Switch 模式匹配:在 switch 中直接做类型匹配
switch (obj) {
case Integer i -> System.out.println("Integer: " + i);
case String s -> System.out.println("String: " + s);
} -
结构化并发 API:简化多并发任务管理
-
值对象 Value Objects:面向值语义,弱化对象身份的类
总结
从 JDK8 到 JDK21,Java 在语法、集合流、并发、性能持续迭代。
- 追求长期稳定:优先选择 JDK8 / JDK11 / JDK17
- 使用最新能力:选择 JDK21
| 版本 | 发布时间 | 定位 | 核心特性 | 选型建议 |
|---|---|---|---|---|
| JDK 8 | 2014 年 | 经典里程碑 LTS | 1.Lambda 表达式 2.Stream API 3. 接口 default 默认方法 4.Optional 空指针处理 5. 新时间日期 API | 老项目、存量业务,企业大量遗留系统 |
| JDK 11 | 2018 年 | JDK8 之后首个 LTS | 1.var 局部变量类型推断 2. 标准化 HttpClient 3.String 新增 strip ()/isBlank ()/lines () 4.ZGC (实验版) 5. 移除 JavaFX、CORBA | 项目从 JDK8 向上过渡,兼顾稳定与少量新特性 |
| JDK 17 | 2021 年 | 目前主流新项目 LTS | 1.Record 记录类 2.sealed 密封类 3.Switch 表达式 4. 增强伪随机数生成器 5. 安全封装增强 | 新项目首选,生态成熟,综合性价比高 |
| JDK 21 | 2023 年 | 最新 LTS,并发革新 | 1. 虚拟线程 Loom 2.Switch 模式匹配 3. 结构化并发 4. 值对象 | 追求最新并发能力,新项目愿意使用前沿特性 |
