摘要:JDK是Java Development Kit的縮寫,包括Java語言的運行環境、工具和基礎類庫,是使用最為廣泛的Java SDK。JDK的每次升級都會帶來一些激動人心的改進,主要體現在語法、類庫和性能三個方面。文章從語法角度介紹即將發布的JDK7中引進的新特性,同時給出具體代碼,為新版本的編碼過程提供依據。
關鍵詞:二進制 字面量下劃線 精準捕獲 泛型推斷 語法改進
JDK7即將發布,相對以前的版本,它做出了很多改進。就語法方面,現在可以使用更加高效、安全的方式書寫代碼,以下分別從6個方面介紹這些變化。
1 二進制字面量
十進制是人在日常活動中最普遍使用的數制,可以方便地使用手指計數。在程序開發領域,十進制存在不能直觀體現量和含義之間關系的缺點,Java語言引進八進制和十六進制字面量,分別以“0”和“0x”作為前綴。在這次版本更新中,整數字面量第一次允許以二進制形式出現,它以“0b”作為字面量前綴,適合用在需要開關功能的場合。請瀏覽以下代碼,可以清晰地定義出文件訪問權限。
byte readable=0b00000001;
byte writable=0b00000010;
byte listable=0b00000100;
2 數字字面量下劃線
較長的數字在書寫過程中容易漏寫或多寫且不易察覺,可讀性也不高。數字字面量下劃線可以輔助解決上述問題。請比較以下兩行代碼,分別定義了我國2010年和2011年人口普查結果。
int number2010=1339724852;
int number2011=13_7053_6875;
下劃線的語法要求是,它的兩端必須是數字或下劃線。請瀏覽以下代碼,前兩行會造成編譯失敗,最后一行雖然能夠通過編譯,但可讀性較差。
double illegalVelocity1=_299792.458;
double illegalVelocity2=299792._458;
double illegibleVelocity=299792.4____58;
3 接受字符串的開關語句
使用switch-case語句代替if-else語句可以提高程序的可讀性。在以前的版本中,switch-case語句只接受整數類型和枚舉,很多開發人員和學者要求支持字符串,這在新版本中成為可能。請分析以下代碼,如果使用if-else語句將會非常麻煩。
String month=\"February\";
switch(month){
case \"January\":
case \"February\":
//另外10個case語句
}
4 泛型推斷
JDK5中增加的泛型元素,是Java語言類型安全的一次重大改進。雖然使用泛型可以在一定程度上優雅地實現了類型安全,但也有一個小小的不足——在多數情況下會造成冗余代碼。需要指出的是,泛型支持幾乎完全在編譯器上實現,編譯后字節碼不包含泛型信息。那么,為什么不增強編譯器去除冗余代碼呢?請觀察以下兩行代碼,它們均可以在JDK7中通過編譯。
List
List
5 自動資源管理
資源在使用完后必須顯式關閉,這是程序設計的一個常識。在Java語言中,以上過程通常使用close方法實現,并且需要使用try-catch-finally語句結構處理異常。請瀏覽以下典型代碼,實現了文件輸入流的建立、使用和關閉。
InputStream is=1;
try{
is=new FileInputStream(\"filename\");
is.read();
}catch(IOException e){
throw e;
}finally{
if(is!=1){
is.close();
}
}
這段代碼最著名的問題是開發人員經常會以錯誤的方式實現它;其次,與所完成的任務相比,代碼量非常大;最后,多數情況下引用pos在最后一個語句塊關閉時已經沒有使用價值,但隨后的代碼還可以訪問它。為了解決這些問題,JDK7中引入自動資源管理,可以代替開發人員關閉對象。請瀏覽以下代碼,它實現了相同的功能。
try(InputStream in=new FileInputStream(\"filename\")){
in.read();
}
6 更簡潔的捕獲
部分代碼會產生多種異常,需要使用多個cache捕獲,JDK7中引入了兩種方法簡化捕獲代碼。請瀏覽以下兩段cache語句,它們處理反射過程中產生的多種異常,實現相同的效果。
catch(final ClassNotFoundException|
InstantiationException|
NoSuchMethodException|
InvocationTargetException e){
throw e;
}
cache(final ReflectiveOperationException e){
throw e;
}
以上兩段代碼均向上層重新拋出異常,需要指出的是,異常對象e不可重新賦值;第二個cache語句中的ReflectiveOperationException異常類是前四個異常類的父類,但在上層只需要處理實際拋出的異常,這是由于JDK7可以精準地判斷異常類型。
7 結語
文中介紹的改進無疑會產生更加優雅的Java代碼,既增加了可讀性和安全性,又減少了代碼量。JDK7的改進并不止于此,它還實現了模塊化、引入Lambda表達式以及文件系統API等。作為開發人員,必須時刻了解語言和開發工具的最新動態,持續提高自身的業務能力。
參考文獻:
[1]馬朝暉,陳美紅.Java語言導學[M].北京:機械工業出版社.2003,1.
[2]陳昊鵬.Java編程思想.北京:機械工業出版社[M].2007,6.