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