1. 程式人生 > >Java學習筆記13:方法的可變引數

Java學習筆記13:方法的可變引數

參考原址:http://www.runoob.com/w3cnote/java-varargs-parameter.html

在定義方法時,在最後一個形參後加上三點 …,就表示該形參可以接受多個引數值,多個引數值被當成陣列傳入。

有幾點需要注意:

  • 可變引數只能作為函式的最後一個引數,但其前面可以有也可以沒有任何其他引數
  • 由於可變引數必須是最後一個引數,所以一個函式最多隻能有一個可變引數
  • Java的可變引數,會被編譯器轉型為一個數組
  • 變長引數在編譯為位元組碼後,在方法簽名中就是以陣列形態出現的。這兩個方法的簽名是一致的,不能作為方法的過載。如果同時出現,是不能編譯通過的。可變引數可以相容陣列,反之則不成立

public void foo(String…varargs){}
foo(“arg1”, “arg2”, “arg3”);
//上述過程和下面的呼叫是等價的
foo(new String[]{“arg1”, “arg2”, “arg3”});

可變引數方法的呼叫

void foo(String... args);
void foo(String[] args);

呼叫可變引數方法,可以給出零到任意多個引數,編譯器會將可變引數轉化為一個數組。也可以直接傳遞一個數組,示例如下:

public class Varargs {

public static void test(String... args) {
    for(String arg : args) {
        System.out.println(arg);
    }
}

public static void main(String[] args) {
    test();//0個引數
    test("a");//1個引數
    test("a","b");//多個引數
    test(new String[] {"a", "b", "c"});//直接傳遞陣列
}
}

package Varags;

/*
 * 	可變引數
	JDK 1.5 開始,Java支援傳遞同類型的可變引數給一個方法。
	方法的可變引數的宣告如下所示:
	typeName... parameterName
	在方法宣告中,在指定引數型別後加一個省略號(...) 。
一個方法中只能指定一個可變引數,它必須是方法的最後一個引數。任何普通的引數必須在它之前宣告。
*/

public class VarargsDemo {

	public static void main(String[] args) {
		//呼叫可變引數的方法
	printMax(34,3,2,56.5);
	printMax(new double[]{1,2,3});
	}

public static void printMax(double... numbers){
	if(numbers.length==0){
		System.out.println("No argument passed");;
		return;
	}
	double result=numbers[0];//賦初值
	
	for(int i=1;i<numbers.length;i++){//求最大值
		if(numbers[i]>result){
			result=numbers[i];
		}
	}
	System.out.println("The max value is "+result);
}
}