Java SE 7發布:2006年12月以來的首個主版本升級
在經過漫長地等待之后,Java SE 7終于發布了。Info的這篇文章總結了JDK 7的關鍵新特性,希望對大家了解JDK有幫助。(2011.07.30最后更新) 從今天開始就可以使用Java 7了,這是Oracle收購Sun之后Java平臺發布的第一個版本。該版本包含一系列很小但很受歡迎的語言變化,含有一個新的文件API及Fork/Join框架,改進了JVM對動態語言的支持。 Java 7的語言級變化已成為Coin項目(JSR 334)的一部分,該項目是JSR 201的后繼者,它被設計成使用一組能改善生產率的細小變化來提升Java語言。特別值得注意地是對"try-with-resources"的介紹。這是對C#的using語句的模仿,但是基于try語句的形式。結果,using語句只能處理單一資源,而try-with-resources能夠在給定語句塊的范圍內處理多個資源。 有兩個針對異常處理的變化。第一,多個異常類型能夠由單個try語句塊處理。擴展了try語句中catch子句的語法,使它能處理一系列的異常類型,這些異常類型由"OR"操作符"|"分隔開,這將用于異常參數的聲明處。第二,如果一個異常參數未被修改,且未在cactch語句塊中被重新拋出,就不必把該異常加到方法簽名中。其它的語言級變化還包括:1. String類型可用于switch語句2. 支持二進制常量,且能在數字中使用下劃線進行分隔,例如,long creditCardNumber = 1234_5678_9012_3456L3. 簡化的可變長參數方法的調用:當包含可變長參數的方法使用了不確定的數組類型時,編譯器會報出警告。現在將該警告從方法調用處移到了方法聲明處。4. 改進了泛型實例創建時的類型推導(< >,即鉆石符):在創建類實例時使用受限制的類型推導,以便顯式地為構造器聲明參數類型,但從上下文可以確定這些類型,那么可用一個空的類型參數設置去替代這一聲明。所以,為了替代如下寫法:Map<String, List<String>> anagrams = new HashMap<String, List<String>>();可以寫成:Map<String, List<String>> anagrams = new HashMap<>(); 已經介紹過兩個主要的新API。第一個是JSR 203,這個API的加入是為了文件系統的訪問,可伸縮的異步I/O操作,Socket-Channel綁定與配置,以及多播數據報。特別能引起企業級開發者興趣的是真實的異步I/O API。對于那些會跨許多連接且要求低延時、高吞吐的高級服務器端應用,該API顯得尤為重要。作為加入Java的最后一個文件系統API,JSR 203還支持某些操作系統的特殊功能。例如,你可以為那些支持符合鏈接的系統創建這種鏈接。因此,JSR 203有些爭議,它并不嚴格遵循"編寫一次,隨處運行"這一原則,盡管它提供了一組能運行在所有平臺上的通用API,但它也提供了某些平臺的某些特定功能。 第二個新API就是Fork/Join框架(它是JSR 166的一部分),原計劃是放到Java 5中的。它為開發者提供了一種將問題分解成任務的機制。這些任務可在任意數量的多核處理器中并發執行。 在其它方面,平臺尋求新的網絡與安全特性,并擴展了對國際化的支持,包括對Unicde 6.0的支持。 最后,Java SE 7還引入自Java起始以來最新的字節碼結構,InvokeDynamic關鍵字。InvokeDynamic加入了多于一個的調用模式,以及多于一個的鏈接模式,這樣就能基于用戶定義的規范進行編程。它的本意是在缺少靜態類型信息時能高效且靈活地執行方法調用,這就使得運行在JVM上的動態語言,如JRuby和Jython,的性能得到實質性地提升。 在歡迎這些特性的同時,從許多方面看來,對于該版本最重要的事情,是它真的終于發出來了。在Sun和Apache軟件基金會之間長期存在的分歧,可能還有Sun在它最后的日子中的領導力與資源分配方面的問題,導致了這次版本間不同尋常的長期斷層。就如Mark Reinhold在最近的一次訪談中所評論的:
由于商業與政治方面的原因,Java在一段時間內進行了冬眠模式。但我們又回來了,并且將要發布版本7。它不是一個革命性的版本,只是一個改進的版本,但它里面確實有一些好東西。 開發者們對JDK 7版入門的興趣,就會撬動對NetBeans 7.0與IntelliJ IEDA 10.5的應用,它們都支持Java SE 7平臺的最新特性。Eclipse Indigo的beta版也已支持Java 7,Oracle的JDeveloper計劃在今年晚些時候發布一個版本去支持JDK 7。