在JDK1.5之後,如果我們定義一個方法需要接受多個參數,並且多個參數類型一致,我們可以對其簡化。
使用前提
- 當方法的參數列表數據類型已經確定,但是參數的個數不確定,就可以使用可變參數.
使用格式
- 定義方法時使用
修飾符 返回值類型 方法名(參數類型... 形參名){ }
- 其實這個書寫完全等價,與只是後面這種定義,在調用時必須傳遞數組,而前者可以直接傳遞數據即可。
修飾符 返回值類型 方法名(參數類型[] 形參名){ }
原理
- 可變參數底層就是一個數組,根據傳遞參數個數不同,會創建不同長度的數組,來存儲這些參數
- 傳遞的參數個數,可以是0個(不傳遞),1,2…多個。
JDK1.5以後。出現了簡化操作。… 用在參數上,稱之爲可變參數。
同樣是代表數組,但是在調用這個帶有可變參數的方法時,不用創建數組(這就是簡單之處),直接將數組中的元素作爲實際參數進行傳遞,其實編譯成的class文件,將這些元素先封裝到一個數組中,在進行傳遞。這些動作都在編譯.class文件時,自動完成了。
注意事項
- 一個方法的參數列表,只能有一個可變參數
public static void show(int...a,String...b){} // 錯誤!
- 如果方法的參數有多個,那麼可變參數必須寫在參數列表的末尾
public static void show(String b,double c,int d,int...a){} // 錯誤!
- 可變參數的特殊(終極)寫法
public static void show(Object...obj){}
// 調用方法
show("abc",5.5,10,1,2,3,4);
案例:計算(0~n)整數和的方法
/*
定義計算(0~n)整數和的方法
已知:計算整數的和,數據類型已經確定int
但是參數的個數不確定,不知道要計算幾個數的和,就可以使用可變參數
add();就會創建一個長度爲0的數組,new int[0]
*/
public class Demo01VarArgs {
public static void main(String[] args) {
int i = add(10,20,30,40,50,60,70,80,90,100);
System.out.println(i); // 550
}
public static int add(int...arr) {
System.out.println(arr); // [I@71e7a66b : 數組 int類型 地址值
System.out.println(arr.length); // 10
// 定義一個初始化變量,記錄累加求和
int sum = 0;
// 遍歷數組,獲取數組中每一個元素
for (int i : arr) {
// 累加求和
sum += i;
}
// 把求和結果返回
return sum;
}
}
上述add方法在同一個類中,只能存在一個。因爲會發生調用的不確定性
結果:
[I@71e7a66b
10
550