一、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、模式匹配、記錄類 等核心語法。