Java 7(2011 年發布)雖非 LTS 版本,但引入了多項深遠影響後續版本的核心特性。本文系統回顧語法糖、I/O 重構、並發增強、JVM 改進等關鍵更新,並附代碼示例與性能參考。
String day = "MON";
switch (day) {
case "MON": case "TUE": case "WED":
case "THU": case "FRI": System.out.println("工作日"); break;
case "SAT": case "SUN": System.out.println("週末"); break;
default: throw new IllegalArgumentException("無效日期: " + day);
}
int million = 1_000_000;
long creditCard = 1234_5678_9012_3456L;
double hex = 0x1.921fb54442d18p0; // 也支援十六進制浮點數
Map> map = new HashMap<>(); // JDK 7
// JDK 6 需寫 new HashMap>();
try {
// ...
} catch (IOException | SQLException e) {
log.error("IO 或 SQL 異常", e);
throw new RuntimeException(e);
}
// 實現 AutoCloseable 的資源自動關閉,即使拋出異常
try (Connection conn = ds.getConnection();
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery()) {
while (rs.next()) { /* ... */ }
} // 編譯器自動生成 finally 關閉代碼
java.nio.file 套件徹底替換 java.io.File:
Path、Paths、Files 核心類。Path path = Paths.get("/data/logs/app.log");
// 讀取所有行
List lines = Files.readAllLines(path, StandardCharsets.UTF_8);
// 流式處理大文件
try (Stream stream = Files.lines(path)) {
stream.filter(l -> l.contains("ERROR")).forEach(System.out::println);
}
// 複製/移動/刪除
Files.copy(src, dest, StandardCopyOption.REPLACE_EXISTING);
Files.walkFileTree(root, new SimpleFileVisitor<>() {
@Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
if (file.toString().endsWith(".tmp")) Files.delete(file);
return FileVisitResult.CONTINUE;
}
});
// 監聽目錄變更
WatchService watcher = FileSystems.getDefault().newWatchService();
path.getParent().register(watcher, ENTRY_CREATE, ENTRY_MODIFY, ENTRY_DELETE);
CyclicBarrier/CountDownLatch。transfer())或非阻塞投遞。Random。RecursiveTask/RecursiveAction 實現分治並行,適用 CPU 密集型遞歸任務。| 特性 | 說明 | 影響 |
|---|---|---|
| 壓縮普通對象指針 | -XX:+UseCompressedOops (64位默認開啟) | 堆 < 32GB 時節省 50% 指針內存 |
| G1 垃圾收集器 | 面向大堆、低延遲的區域化收集器 | JDK 9 成為默認 GC,JDK 7 需手動開啟 |
| JVM 啟動參數分層 | -XX:+TieredCompilation | C1(Client) 快速啟動 + C2(Server) 峰值性能 |
| invokedynamic | JSR 292,動態語言調用字節碼指令 | Lambda、動態語言、方法句柄基礎 |
try-with-resources 支持 Connection/Statement/ResultSet,RowSetFactory 創建離線 RowSet。javax.script 增強,invokedynamic 奠基。jsse.enableSNIExtension 預設開啟,可能影響老舊 SSL 服務器握手。java.util.logging 配置文件格式微調。sun.*, com.sun.*)進一步限制訪問,遷移至標準替代方案。Java 7 是「現代 Java」的奠基版:try-with-resources、NIO.2、invokedynamic 直接支撐了 Java 8 Lambda/Stream、Java 9 模塊化、Java 11+ HTTP Client 等里程碑。雖已結束公共更新,理解其設計動機對掌握當前版本內核機制極有裨益。