Java5新特性之靜態導入、可變參數、增強for循環、自動拆裝箱

JDK1.5已經發布很長時間,之所以還拿出來是因爲它增加了很多個重要的特性,使用這些特性有助於我們簡化開發,編寫的代碼更加簡潔清晰安全,主要有以下幾個特性:

Ø  靜態導入

Ø  可變參數

Ø  增強for循環

Ø  自動拆裝箱

Ø  泛型

Ø  枚舉

由於泛型、枚舉內容比較多,也最重要,之後單拿出來講。這裏先介紹前面四個簡單而又實用的小特性。

1. 靜態導入

所謂“靜態導入”只不過是在普通的import語句中加入關鍵字static,例如:

Ø  非靜態導入:import java.lang.Math;

Ø  靜態導入 :import static java.lang.Math.*;或import static java.lang.Math.max;

靜態導入的功能很簡單:

Ø  首先,靜態導入可以導入某個類下的 某個 方法(靜態),或 所有 方法,而非靜態導入只能定位到某個類。

Ø  其次,靜態二字的作用起在 靜態方法 的調用上。如果是非靜態導入,那麼調用某個類的靜態方法時要用【類名 . 方法名】;如果是靜態導入,那麼調用該類靜態方法時就可以省去類名,直接用【方法名】即可,實例如下:

1)       非靜態導入:


http://img0.tuicool.com/V7R3quf.png!web

2)       靜態導入:http://img2.tuicool.com/qiYZja.png!web


2.  可變參數

可變參數說的是一個方法,接收的參數個數是動態可變的。例如我們要封裝一個方法,使得它可以計算 任意多個 數的加法:

public class VariableParameter {
	//計算任意多個整數的加法的方法
	public static int add(int...args) {
		int sum = 0;
		for (int i = 0; i < args.length; i++) {
			sum = sum+args[i];
		}
		return sum;
	}
	
	public static void main(String[] args) {
		//測試1:計算2個整數的加法
		System.out.println(add(1,2));//輸出3
		//測試2:計算3個整數的加法
		System.out.println(add(10, 20,30));//輸出60
	}
	
}

使用規則:

1)       如果有多個參數,那麼可變參數只能出現在參數列表的最後:例如: public static int add(int x, int y, int...args ) {…}。

2)        位於變量類型與變量名之間(前後有無空格都可以)。

3)       調用可變參數的方法時,編譯器爲該可變參數隱含創建一個數組,在方法體中以數組的方式訪問可變參數。

3. 增強for循環

很簡單,直接看實例:

public static int add(int x,int...args) {
		int sum = x;
		
		//普通for循環
		 /*	for (int i = 0; i < args.length; i++) {
			sum = sum+args[i];
			}*/
			
		//增強for循環
		for(int arg:args){
			sum=sum+arg;
		}
		return sum;
	}

使用規則:

1)       語法,for(type 變量名 : 集合變量名){…},例如:for(int arg : args){…}

2)       迭代變量必須在()中定義,例如:for( int arg : args){…}

3)       集合變量可以是數組或實現了Iterable接口的集合類

4. 自動拆裝箱

拆裝箱即引用類型與值類型的相互轉化,java5以前都是手動的拆裝箱,概念不多說,直接看實例:

public class AutoBox {

	public static void main(String[] args) {
		// 自動將基本數據類型(值類型)包裝爲Integer(引用類型)對象(裝箱)
		Integer a = 1;
		Integer b = 1;
		System.out.println(a == b);//輸出  TRUE
		
		Integer a1 = 130;
		Integer b1 = 130;
		System.out.println(a1 == b1);//輸出FALSE
		
		//從-128到127之間的數因爲用的比較頻繁,所以相同的數會包裝爲同一個對象(如上面的a、b),這裏應用了“享元模式”
		
		//手動裝箱
		Integer a2 = Integer.valueOf(1);
		Integer b2 = Integer.valueOf(1);
		System.out.println(a2 == b2);//輸出TRUE
	}

}

代碼註釋中提到了,-128到127之間的數由於非常常用,所以爲了節省內存,自動裝箱時運用到了“享元模式”。代碼中Integer a = 1與 Integer b =1;看似是a、b兩個對象,實際上它們指向的是同一塊內存空間。而Integer a1 = 130與 Integer b1= 130;中a1、b1指向的是不同的內存空間,所以它們是兩個不同的對象。

享元思想:有很多個小對象,它們有很多屬性相同,就將它們弄成一個對象,將那些不同的屬性弄成方法的參數,當需要的時候再傳遞進來。相同的屬性稱爲對象的內部狀態,不同的屬性稱爲外部狀態。它適合用於只是因重複而導致使用無法令人接受的大量內存的大量物件

5. 總結

以上幾個小特性,貌似很簡單,但如能熟練使用會很大程度的提高我們的編碼效率,提高代碼質量與性能。枚舉與泛型是java5引入的最重要的兩個特性,其中泛型思想已在上篇文章中介紹。枚舉看似簡單,好處卻很多,是java一開始砍掉後又不得不彌補上的特性,將會在後面文章介紹。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章