1.概述
可變參數是jdk1.5後出現的新特性,允許在定義方法時不在指名參數的個數,而在調用方法時直接傳入需要的參數即可。
2.案例引入
示例代碼:
//輸出連個參數的和
public void output(int a,int b){
System.out.println(a+b);
}
//輸出三個參數的和
public void output(int a,int b,int c){
System.out.println(a+b+c);
}
說明:例如以上的兩個方法,由於事先並不確定傳入的參數個數,因此不得不通過方法重載定義多個同名方法,這樣做是相當繁瑣的。
3.解決方案
第一種解決方案:
//以數組的形式接收參數
public void output(int[] args){
int num=0;
for(int i=0;i<args.length;i++){
num+=i;
}
System.out.println(num);
}
說明:將方法的參數改爲數組形式可以解決參數個數不確定的問題,但是卻存在另一個麻煩。即調用該方法時,每次都需要建立一個參數數組用於傳入,因此這種方法也有一定的繁瑣性。
第二種解決方案-利用新特性:
//部分代碼
//利用可變參數解決參數不確定的問題
public static void output(int... args){
int num=0;
for(int i=0;i<args.length;i++){
num+=args[i];
}
System.out.println(num);
}
//在main方法中調用該方法
public static void main(String[] args) {
output(1,2,5,9);
}
說明:利用可變參數這一新特性,在調用方法時只需要傳入需要的參數即可,不需要額外建立參數數組。在使用時,將方法中的參數(上例中的args
)作爲數組操作即可。實際上,可變參數就是數組參數的一種簡化形式,只是對參數的數組化封裝由虛擬機代爲完成。
4.格式
訪問修飾符 返回值類型 方法名(數據類型... 參數名){
//具體操作
}
例:
public void show(String... args){
}
5.使用錯誤
典型錯誤:
public void show(int... agrs,String s){
//具體代碼
}
編譯報錯:
The variable argument type int of the method show must be the last parameter
說明:當方法的參數中既包含可變參數又包含普通參數時,若有參數置於可變參數後面,則一定發生錯誤,因爲這會導致代碼出現歧義。正確的做法是將可變參數置於方法參數列表的最後。
修正代碼:
public void show(String s,int... agrs){
//具體代碼
}