Java 8(2014)
主要新特性
Lambda 表达式 - 简化匿名内部类的写法。函数式接口 (@FunctionalInterface
) - 约束接口仅有一个抽象方法。Stream API - 提供集合数据处理的函数式编程方式。Optional 类 - 解决 null
引发的 NullPointerException
。新的日期时间 API (java.time
包) - 解决 Date
API 的弊端。
使用场景
Lambda 表达式 :替代匿名内部类,减少样板代码。Stream API :用于批量数据处理,如过滤、排序、映射。Optional :减少 null
检查,提高代码健壮性。
示例
// 1. Lambda 表达式
Runnable r = () -> System.out.println("Hello Lambda!");
r.run();
// 2. Stream API
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.stream().filter(name -> name.startsWith("A")).forEach(System.out::println);
// 3. Optional
Optional<String> optional = Optional.ofNullable(null);
System.out.println(optional.orElse("Default Value"));
// 4. 日期 API
LocalDate today = LocalDate.now();
System.out.println(today);
Java 9(2017)
主要新特性
模块化系统(Project Jigsaw) - 提高项目的可维护性和安全性。List.of()
, Set.of()
, Map.of()
- 创建不可变集合。改进的 try-with-resources
- 资源自动关闭。
使用场景
模块化 :用于拆分大型项目,提高封装性和安全性。不可变集合 :简化创建只读集合的代码。
示例
// 1. 创建不可变集合
List<String> list = List.of("A", "B", "C");
System.out.println(list);
// 2. try-with-resources 简化
BufferedReader br = new BufferedReader(new FileReader("test.txt"));
try (br) {
System.out.println(br.readLine());
}
Java 10(2018)
主要新特性
局部变量类型推断 (var
) - 让编译器推断变量类型。G1 GC 改进 - 提高垃圾回收效率。
使用场景
var
:简化变量声明,适用于短生命周期的局部变量。
示例
var numbers = List.of(1, 2, 3);
System.out.println(numbers);
Java 11(2018,LTS)
主要新特性
var
在 Lambda 表达式中使用标准 HttpClient
字符串增强 (isBlank()
, lines()
, repeat()
) ZGC(低停顿垃圾回收器)
使用场景
HttpClient
:替代 HttpURLConnection
,用于 HTTP 请求。字符串增强 :更方便地处理字符串。
示例
// 1. HttpClient
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder().uri(URI.create("https://example.com")).build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
// 2. String 新方法
System.out.println(" ".isBlank()); // true
System.out.println("Hello\nWorld".lines().count()); // 2
System.out.println("Java".repeat(3)); // JavaJavaJava
Java 12 - Java 14(2019 - 2020)
主要新特性
switch
表达式(简化 switch
语法)多行文本块 record
(简化数据类定义)
示例
// 1. switch 表达式
String result = switch (2) {
case 1 -> "One";
case 2 -> "Two";
default -> "Other";
};
// 2. 文本块
String text = """
Line 1
Line 2
""";
System.out.println(text);
// 3. record
record User(String name, int age) {}
User user = new User("Alice", 30);
System.out.println(user);
Java 15 - Java 17(2020 - 2021,LTS)
主要新特性
sealed
类 (限制继承)ZGC 作为默认垃圾回收器 instanceof
模式匹配
示例
// 1. sealed 类
sealed class Animal permits Dog, Cat {}
final class Dog extends Animal {}
final class Cat extends Animal {}
// 2. instanceof 模式匹配
Object obj = "Hello";
if (obj instanceof String s) {
System.out.println(s.length());
}
Java 18 - Java 19(2022)
主要新特性
简单 Web 服务器 (SimpleWebServer
) 虚拟线程(预览) 结构化并发
示例
// 1. 启动简单 Web 服务器
SimpleFileServer.createFileServer(Path.of("static"), SimpleFileServer.OutputLevel.VERBOSE).start();
// 2. 虚拟线程(预览)
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
executor.submit(() -> System.out.println(Thread.currentThread()));
}
Java 20 - Java 21(2023,LTS)
主要新特性
虚拟线程(正式版) record
模式匹配垃圾回收优化
示例
// 1. 虚拟线程
Thread.ofVirtual().start(() -> System.out.println("Hello Virtual Thread"));
// 2. record 模式匹配
record Point(int x, int y) {}
void printPoint(Object obj) {
if (obj instanceof Point(int x, int y)) {
System.out.println("Point: " + x + ", " + y);
}
}
总结
版本 主要特性 使用场景 Java 8 Lambda, Stream, Optional, 新日期 API 简化代码,提高可读性 Java 9 模块化, List.of()
大型项目模块化,创建不可变集合 Java 10 var
类型推断减少代码冗余 Java 11 HttpClient
, String
新方法HTTP 请求优化,字符串增强 Java 12 switch
表达式代码可读性提升 Java 13 文本块 处理多行字符串 Java 14 record
代替数据类 Java 15 sealed
类限制继承 Java 16 instanceof
模式匹配更简洁的类型检查 Java 17 LTS, sealed
类 稳定生产版本 Java 18 SimpleWebServer
内嵌 Web 服务器 Java 19 虚拟线程(预览) 并发优化 Java 20 结构化并发 线程管理优化 Java 21 LTS, 虚拟线程(正式版) 高并发应用