Java 各版本核心新特性的详细说明
一、Java 8(2014)—— 函数式编程的里程碑
1. Lambda 表达式
- 作用:简化匿名内部类,支持函数式编程。
- 示例:
// 传统匿名内部类 Runnable r1 = new Runnable() {@Overridepublic void run() {System.out.println("Hello");} };// Lambda 表达式 Runnable r2 = () -> System.out.println("Hello");
2. Stream API
- 作用:声明式处理集合数据,支持链式操作。
- 示例:
List<Integer> numbers = Arrays.asList(1, 2, 3); List<Integer> squares = numbers.stream().map(n -> n * n).collect(Collectors.toList()); // [1, 4, 9]
3. 方法引用(Method References)
- 作用:简化 Lambda 表达式,直接引用已有方法。
- 示例:
list.forEach(System.out::println); // 等价于 x -> System.out.println(x)
4. 默认方法与静态方法(接口增强)
- 作用:允许接口包含默认实现和静态方法。
- 示例:
public interface MyInterface {default void log() {System.out.println("Default method");}static void staticMethod() {System.out.println("Static method");} }
二、Java 9(2017)—— 模块化与工具链升级
1. 模块系统(Project Jigsaw)
- 作用:通过模块(
module-info.java
)管理代码依赖。 - 示例:
module com.example.myapp {requires java.base;exports com.example.myapp.api; }
2. 集合工厂方法
- 作用:快速创建不可变集合。
- 示例:
List<String> list = List.of("A", "B", "C"); Set<Integer> set = Set.of(1, 2, 3);
3. 接口私有方法
- 作用:允许在接口中定义私有方法,封装内部逻辑。
- 示例:
public interface Calculator {private int add(int a, int b) {return a + b;}default int calculate(int a, int b) {return add(a, b);} }
三、Java 10(2018)—— 局部变量类型推断
1. var
关键字
- 作用:局部变量类型推断(编译时类型推导)。
- 示例:
var list = new ArrayList<String>(); // 推断为 ArrayList<String> var name = "Java"; // 推断为 String
四、Java 11(2018)—— LTS 长期支持版本
1. HTTP Client(标准库)
- 作用:替代
HttpURLConnection
,支持异步和 HTTP/2。 - 示例:
HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder().uri(URI.create("https://example.com")).build(); HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
2. 单文件源码直接运行
- 作用:无需先编译
.java
文件,直接运行。 - 示例:
java HelloWorld.java
五、Java 14(2020)—— 语法糖与预览特性
1. record
关键字(预览)
- 作用:定义不可变数据类,自动生成
equals
、hashCode
、toString
。 - 示例:
public record Person(String name, int age) {} Person p = new Person("Alice", 30); System.out.println(p.name()); // Alice
2. switch
表达式(正式)
- 作用:简化
switch
语法,支持返回值。 - 示例:
String dayType = switch (day) {case "Mon", "Tue" -> "Weekday";case "Sat", "Sun" -> "Weekend";default -> throw new IllegalArgumentException(); };
六、Java 15(2020)—— 密封类与隐藏类
1. 密封类(Sealed Classes,预览)
- 作用:限制类的继承关系。
- 示例:
public sealed class Shape permits Circle, Square {} public final class Circle extends Shape {} public final class Square extends Shape {}
七、Java 16(2021)—— 模式匹配与向量API
1. 模式匹配 instanceof
(正式)
- 作用:简化类型检查和转换。
- 示例:
if (obj instanceof String s) {System.out.println(s.length()); }
2. Stream.toList()
方法
- 作用:简化流到列表的转换。
- 示例:
List<Integer> list = Stream.of(1, 2, 3).toList();
八、Java 17(2021)—— LTS 长期支持版本
1. 密封类(正式)
- 作用:同 Java 15,结束预览状态。
2. switch
模式匹配(预览)
- 示例:
Object obj = "Hello"; String result = switch (obj) {case Integer i -> "Integer: " + i;case String s -> "String: " + s;default -> "Unknown"; };
九、Java 21(2023)—— 虚拟线程与结构化并发
1. 虚拟线程(Virtual Threads)
- 作用:轻量级线程,提升高并发性能。
- 示例:
Runnable task = () -> System.out.println(Thread.currentThread()); Thread.startVirtualThread(task); // 使用虚拟线程
2. 字符串模板(预览)
- 作用:简化字符串拼接。
- 示例:
String name = "Java"; String message = STR."Hello \{name}!"; // Hello Java!
总结:各版本核心特性速查表
版本 | 核心特性 | 应用场景 |
---|---|---|
Java 8 | Lambda、Stream API、方法引用 | 集合处理、函数式编程 |
Java 9 | 模块系统、工厂方法集合 | 模块化开发、不可变集合 |
Java 10 | var 类型推断 | 简化局部变量声明 |
Java 11 | HTTP Client、单文件运行 | 网络请求、快速测试 |
Java 14 | record 、switch 表达式 | 数据类、简化分支逻辑 |
Java 16 | 模式匹配 instanceof 、Stream.toList() | 类型检查、流操作优化 |
Java 17 | 密封类正式版、switch 模式匹配 | 继承控制、模式匹配 |
Java 21 | 虚拟线程、字符串模板 | 高并发、字符串处理 |
升级建议
- 生产环境:优先选择 LTS 版本(如 Java 11、17、21),获得长期支持。
- 新项目:推荐使用 Java 17 或 21,享受现代语法和高性能特性。
- 学习方向:掌握 Lambda、Stream API、模式匹配、记录类 等核心语法。