自 Java 1.7(2011) 发布以来,Java 平台经历了十余年的持续演进。从早期的语法增强、并发改进,到近年的模块化、函数式编程、记录类、密封类、虚拟线程,Java 的设计重心已从"语言增强"转向"并发模型与运行时架构升级"。
Java 1.7(2011)------现代 Java 的起点
Java 7 为后续版本奠定了坚实基础,在语法与并发层面均有重要改进。
1. Diamond Operator(泛型菱形语法)
java
List<String> list = new ArrayList<>();
2. Try-with-Resources(自动资源管理)
java
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
return br.readLine();
}
3. Switch 支持 String
java
switch (command) {
case "start" -> start();
case "stop" -> stop();
}
4. Fork/Join 框架(并行计算)
java
ForkJoinPool pool = new ForkJoinPool();
pool.invoke(new MyRecursiveTask());
5. NIO.2(文件系统 API)
java
Path path = Paths.get("file.txt");
Files.createFile(path);
Java 1.8(2014)------里程碑版本
Java 8 是 Java 历史上影响最深远的版本之一,引入函数式编程范式。
1. Lambda 表达式
java
list.forEach(e -> System.out.println(e));
2. Stream API
java
list.stream()
.filter(s -> s.startsWith("a"))
.forEach(System.out::println);
3. Optional(减少 NPE)
java
Optional<String> opt = Optional.of("value");
opt.ifPresent(System.out::println);
4. 全新的时间 API(java.time)
java
LocalDate date = LocalDate.now();
LocalTime time = LocalTime.now();
5. 接口默认方法
java
interface MyInterface {
default void log() {
System.out.println("default method");
}
}
Java 9(2017)------模块化时代
1. 模块系统(Project Jigsaw)
java
module my.module {
requires java.base;
exports com.my.package;
}
2. JShell(REPL 工具)
text
jshell> int x = 10
3. 集合工厂方法
java
List<String> list = List.of("a", "b", "c");
4. Stream API 增强(takeWhile / dropWhile)
java
list.stream().takeWhile(s -> s.length() < 3).forEach(System.out::println);
Java 10(2018)------类型推断
var 关键字
java
var list = new ArrayList<String>();
Java 11(2018,LTS)------企业级稳定版本
1. String 新方法
java
"hello\nworld".lines().forEach(System.out::println);
2. Lambda 参数支持 var
java
list.forEach((var e) -> System.out.println(e));
3. 标准 HTTP Client
java
HttpClient client = HttpClient.newHttpClient();
4. 移除 Java EE / CORBA
Java 12 ~ Java 15(2019--2020)------语言预览期
Switch 表达式
java
var result = switch (day) {
case MONDAY, FRIDAY -> 6;
case TUESDAY -> 7;
default -> 0;
};
Text Blocks(多行字符串)
java
String json = """
{
"name": "Tom"
}
""";
Sealed Classes(预览)
java
public sealed class Shape permits Circle, Square {}
Java 16(2021)------Record 正式化
Record(标准特性)
java
public record Point(int x, int y) {}
Java 17(2021,LTS)------现代 Java 基线
1. Sealed Classes(正式)
2. switch 模式匹配(预览)
java
switch (obj) {
case Integer i -> System.out.println(i);
case String s -> System.out.println(s);
default -> {}
}
3. Foreign Function & Memory API(孵化)
Java 18(2022)------平台默认行为调整
UTF-8 成为默认字符集
简易 Web Server
bash
jwebserver
Java 19(2022)------并发模型变革前夜
虚拟线程(预览)
java
Thread.startVirtualThread(() -> System.out.println("Hello"));
Java 20(2023)------过渡版本
Scoped Values(预览)
Vector API(孵化)
Java 21(2023,LTS)------并发模型的分水岭
Java 21 是继 Java 8、Java 11、Java 17 之后最重要的 LTS 版本。
1. 虚拟线程(Virtual Threads)正式发布
java
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
executor.submit(() -> handleRequest());
}
让 Java 在高并发 I/O 场景下具备接近 Go 的吞吐能力。
2. switch 模式匹配(正式)
3. Record Patterns(正式)
java
if (obj instanceof Point(int x, int y)) {
System.out.println(x + y);
}
4. Sequenced Collections
java
list.getFirst();
list.getLast();
5. Scoped Values(正式)
总结:如何选择 Java 版本?
- 老项目:Java 8 → 11 / 17
- 新项目 :直接 Java 21(LTS)
- 高并发系统:Java 21 + 虚拟线程
Java 21 标志着 Java 从"重量级线程模型"正式迈入轻量级并发时代,也是当前最值得在生产环境中采用的版本。