package javaee.china.cxp;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
/**
* 2012年9月8日
* JDK1.5新特性 可變參數
* 可變參數:適用於參數個數不確定,類型確定的情況,java把可變參數當做數組處理。
* 因為參數個數不定,所以當其後邊還有相同類型參數時,java無法區分傳入的參數屬於前一個可變參數還是後邊的參數,
* 所以隻能讓可變參數位於最後一項。
* 可變參數的特點:
* (1)、隻能出現在參數列表的最後;
* (2)、…位於變量類型和變量名之間,前後有無空格都可以;
* (3)、調用可變參數的方法時,編譯器為該可變參數隱含創建一個數組,在方法體中一數組的形式訪問可變參數。
*/
public class Demo_6_VariablePparameters {
@Test
public void test_1(){
System.out.println(sumNumber(1,2,3,4,5,6));
}
/**
*
* @param …nums 可變參數 (下面方法中可以把…nums理解為數組)
* @return 總和
* 理解:這樣做的好處 個人理解拿 求和為例 ACM 或實際 用戶輸入的數不確定話 可以減少代碼量讓
* 程序可讀性更強
*
*/
public int sumNumber(int …nums){
int sum = 0;
for(int i:nums){
sum += i;
}
return sum;
}
/**
* Arrays.asList 方法實現瞭可變參數
* 測試
*/
@Test
public void test_2(){
List list = Arrays.asList("1","2","3","4","5");
System.out.println(list);
String[] arrs = {"1","2","3","4","5"};
List list2 = Arrays.asList(arrs);
System.out.println(list2);
int[] intArrs = {1,2,3,4,5};
List list3 = Arrays.asList(intArrs);//說明asList方法必須傳入的是對象
System.out.println(list3);
}
/**
* 也可以將它實現為幾個重載的方法,每個方法接受不同數量的int參數。
* 這樣做有時可以令方法更容易使用,因為調用代碼不需要首先創建一個數組。
* 以下三個重裝方法可以給add(int… list) 這一個方法代替
*/
public int add(int a, int b) {
return a + b;
}
public int add(int a, int b, int c) {
return a + b + c;
}
public int add(int a, int b, int c, int d) {
return a + b + c + d;
}
/**
* 如果隻有少量值,這對於調用代碼更為方便,因為現在可以使用add(12,14,16)來代替
* add(new int[] {12,14,16})。但是,編寫類似這樣的方法存在問題
* 需要為每種可能的參數組合編寫不同版本
* 在Java 5中,可以編寫一個方法以使它允許可變數量的參數並讓編譯器完成將列表包裝到一個數組中的操作。
* 雖然內部仍是處理數組,但此時的編譯器已隱藏瞭細節。以下的代碼使用可變參數(vararg)重寫瞭add方法。
*/
public int add(int… list) {
int sum = 0;
for (int item : list) {
sum += item;
}
return sum;
}
}