一、Java 8(2014)—— 函数式编程的里程碑
1. Lambda 表达式
- 作用:简化匿名内部类,支持函数式编程。
- 示例:// 传统匿名内部类
Runnable r1 = new Runnable() {
@Override
public 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、模式匹配、记录类 等核心语法。
评论前必须登录!
注册