Java 7於7月28日開始提供下載,這是Oracle收購Sun之後Java平臺的首次發佈。該版本包含瞭多個對語言的變更,雖然很小但卻深受歡迎,還有新的文件API和Fork/Join框架,並改善瞭JVM的動態語言支持。
Java 7之前是Project Coin(JSR 334)的一部分,它是JSR 201的繼任者,通過一些能改善生產率的小變化來增強Java語言。尤其值得一提的是引入瞭“try-with-resources”,它和C#中的using語句很像,不過是基於try語句的形式,using語句隻能處理單個資源,而try-with-resources可以在一個塊中處理多個資源。
關於異常處理有兩個變化。首先,一個catch塊中可以處理多個指定類型的異常。Java 7對try的catch子句的語法做瞭擴展,能接受一系列異常類型,在聲明異常參數的地方用“或”操作符(即“|”)來進行分隔。其次,如果異常參數沒被修改,而且在catch塊裡又被重新拋瞭出來,現在你不需要在方法簽名上添加該異常瞭(譯註:此處表達的含義不太準確,其實是說在catch塊中如果重新拋出該異常,現在會有更細致的類型檢查,詳見官方文檔)。
其他語言變更包括:
1、switch語句包含瞭對字符串的支持。
2、為瞭增強可讀性,數字增加瞭二進制表示和下劃線分隔符――例如long creditCardNumber = 1234_5678_9012_3456L。
3、簡化瞭Varargs方法的調用:對編譯器的警告做瞭調整,以前在結合瞭Varargs和非具體化數組類型的方法被調用時會有警告,現在這個警告從調用方移到瞭方法聲明上。
4、改善瞭針對泛型實例創建(< > 或菱形)的類型推斷:在類實體創建時使用有限類型推斷,雖然需要顯式聲明參數類型,但從上下文中能把它們確定下來,這樣一來就可以直接使用空的類型參數集合瞭。以前要這麼寫:
現在可以這麼寫:
引入瞭兩個主要的新API。第一個是JSR 203,針對文件系統訪問、可擴展異步I/O操作、多播數據包、Socket通道綁定和配置添加瞭新的API。企業開發者特別感興趣的是增加瞭真正的異步I/O API,這對需要跨多連接的低延時、高吞吐的高端服務器應用程序來說尤為重要。JSR 203還為Java添加瞭一個真的文件系統API,提供瞭對某些OS特定功能的支持。例如,你可以在支持符號鏈接的系統中創建符號鏈接。但這一特性也備受爭議,雖然JSR 203提供瞭可運行於所有平臺、支持平臺特定特性的通用API,但它並非嚴格意義上的“一次編寫到處運行”。
第二個新API是Fork/Join框架(JSR 166的一部分),起初是計劃放在Java 5裡的。它為開發者提供瞭一種機制,可以將問題拆解為多個任務,在任意數量的處理器核心上並行執行。
此外,平臺中還有新的網絡和安全特性,對國際化的擴展支持中還包括瞭Unicode 6.0支持。
最後,Java SE 7使用瞭InvokeDynamic關鍵字來標記Java誕生後的首個新字節碼指令。InvokeDynamic添加瞭一種新的調用模式和鏈接模式,可以通過編程支持用戶定制的規范。特別是在缺乏靜態類型信息的方法調用中,它能支持高效、靈活的方法執行,這大幅改善瞭動態語言的性能,例如運行於JVM之上的JRuby和Jython。
新特性受到瞭大傢的歡迎,但最重要的是這個新版本終於發佈瞭。Sun和Apache Software Foundation的長期分歧,還有Sun最後的日子裡的領導和資源問題,都是導致兩個版本之間超長間隔時間的原因。正如Mark Reinhold在最近的采訪中所說的:
出於商業和政治原因,Java曾進入短期的休眠狀態。但現在我們回來瞭,將要發佈Java 7,這不是一個革命性的版本,而是一個進化版本,其中不乏一些好內容。
對如何著手使用Java SE 7感興趣的開發者不妨使用一下NetBeans IDE 7.0或IntelliJ IDEA 10.5,它們都支持Java SE 7平臺的最新特性。Eclipse Indigo同樣也有beta級別的Java 7支持,Oracle JDeveloper預計在今年下半年會有一個支持JDK 7的版本。