JDK1.5已經發布很長時間,之所以還拿出來是因為它增加了很多個重要的特性,使用這些特性有助于我們簡化開發,編寫的代碼更加簡潔清晰安全,主要有以下幾個特性:
? 靜態導入
? 可變參數
? 增強for循環
? 自動拆裝箱
? 泛型
? 枚舉
由于泛型、枚舉內容比較多,也最重要,之后單拿出來講。這里先介紹前面四個簡單而又實用的小特性。
所謂“靜態導入”只不過是在普通的import語句中加入關鍵字static,例如:
? 非靜態導入:import java.lang.Math;
? 靜態導入 :import static java.lang.Math.*;或import static java.lang.Math.max;
靜態導入的功能很簡單:
? 首先,靜態導入可以導入某個類下的某個方法(靜態),或所有方法,而非靜態導入只能定位到某個類。
? 其次,靜態二字的作用起在靜態方法的調用上。如果是非靜態導入,那么調用某個類的靜態方法時要用【類名 . 方法名】;如果是靜態導入,那么調用該類靜態方法時就可以省去類名,直接用【方法名】即可,實例如下:
1) 非靜態導入:
2) 靜態導入:
可變參數說的是一個方法,接收的參數個數是動態可變的。例如我們要封裝一個方法,使得它可以計算任意多個數的加法:
使用規則:
1) 如果有多個參數,那么可變參數只能出現在參數列表的最后:例如:public static int add(int x, int y,int...args) {…}。
2) …位于變量類型與變量名之間(前后有無空格都可以)。
3) 調用可變參數的方法時,編譯器為該可變參數隱含創建一個數組,在方法體中以數組的方式訪問可變參數。
很簡單,直接看實例:
使用規則:
1) 語法,for(type 變量名 : 集合變量名){…},例如:for(int arg : args){…}
2) 迭代變量必須在()中定義,例如:for(int arg : args){…}
3) 集合變量可以是數組或實現了Iterable接口的集合類
拆裝箱即引用類型與值類型的相互轉化,java5以前都是手動的拆裝箱,概念不多說,直接看實例:
代碼注釋中提到了,-128到127之間的數由于非常常用,所以為了節省內存,自動裝箱時運用到了“享元模式”。代碼中Integer a = 1與 Integer b =1;看似是a、b兩個對象,實際上它們指向的是同一塊內存空間。而Integer a1 = 130與 Integer b1= 130;中a1、b1指向的是不同的內存空間,所以它們是兩個不同的對象。
享元思想:有很多個小對象,它們有很多屬性相同,就將它們弄成一個對象,將那些不同的屬性弄成方法的參數,當需要的時候再傳遞進來。相同的屬性稱為對象的內部狀態,不同的屬性稱為外部狀態。它適合用于只是因重復而導致使用無法令人接受的大量內存的大量物件
以上幾個小特性,貌似很簡單,但如能熟練使用會很大程度的提高我們的編碼效率,提高代碼質量與性能。枚舉與泛型是java5引入的最重要的兩個特性,其中泛型思想已在上篇文章中介紹。枚舉看似簡單,好處卻很多,是java一開始砍掉后又不得不彌補上的特性,將會在后面文章介紹。
下一篇 Java的自動拆箱和裝箱