java的可變參數(shù)列表

關(guān)于java的可變參數(shù)列表

1.簡介:

java的可變參數(shù)列表是的從jdk1.5開始新增的,其英文名詞varargs

參看:New Features and Enhancements J2SE 5.0

2.作用

可以傳未知個數(shù)的參數(shù),無需手動將參數(shù)列表裝入數(shù)組

參看:Varargs

3.語法

//可變參數(shù)列表的varname被編譯后其實是一個數(shù)組來的
anymethod(typename ... varname){}

4.簡單例子

? 可以傳很多個參數(shù),也可以不傳參數(shù)。某種意義上說還可以減少方法的重載。

public class Test {
    public static void varArgs(int ... numbers){
        //numbers其實是數(shù)組,它有l(wèi)ength屬性,numbers.length可以獲取它的參數(shù)個數(shù);可以用下標訪問值,比如number[0],當然這是要number.lenth>0時候才可以訪問的。
        for(int s: numbers){
            System.out.print(s+",");
        }
        System.out.println();
    }
    public static void main(String arg[]){
      varArgs();
      varArgs(1,2);
      varArgs(1,2,3,4,5,6);
    }
}

輸出結(jié)果是:

1,2,
1,2,3,4,5,6,

? 這種寫法挺酷的。當然用數(shù)組也可以實現(xiàn),不過會多幾個步驟,需要方法重載無參數(shù)的情況,另外使用的時候也需要創(chuàng)建一個數(shù)組,會比可變參數(shù)列表的寫法多些代碼。

代碼如下:

public class Test {
    public static void varArgs(){
        System.out.println();
    }
    public static void varArgs(int[]numbers){
        for(int s: numbers){
            System.out.print(s+",");
        }
        System.out.println();
    }
    public static void main(String arg[]){
        varArgs();
        varArgs(new int[]{1,2});
        varArgs(new int[]{1,2,3,4,5,6});
    }
}

? 顯然,可變參數(shù)列表的寫法舒服、簡潔些,看起來也高級些。

5.注意事項

//1.可變參數(shù)列表一定是在最后的
public void test(int ... num,double n)//是錯誤的
public void test(double n,int ... num)//是正確的
//2.每個方法最多只有一個可變參數(shù)列表

6.結(jié)合泛化

? 有時候我們使用泛化還可以讓參數(shù)變得更加靈活些,讓參數(shù)類型有更多選擇。

比如

public class Test {
    public static <E>void varArgs(E ... arg){
        for(E s: arg){
            System.out.print(s+",");
        }
        System.out.println();
    }

    public static void main(String arg[]){
      varArgs(11.1,2.3,0.4);
      varArgs(1,2,3,4,5,6);
      varArgs("hi","hello");
    }
}

輸出

11.1,2.3,0.4,
1,2,3,4,5,6,
hi,hello,

? 注意在這里,如果要像之前那樣用數(shù)組改寫會有所不同,在可變參數(shù)列表中這里的泛化的每個參數(shù)不一定需要統(tǒng)一類型,如下面的

public class Test {
    public static <E>void varArgs(E ... arg){
        for(E s: arg){
            System.out.print(s+",");
        }
        System.out.println();
    }

    public static void main(String arg[]){
        //下面的調(diào)用時是可運行的
      varArgs("hi",1,new double[]{});
    }
}

? 其實,上面的泛化相當于參數(shù)就是Object類型

public class Test {
    public static void varArgs(Object ... arg){
        for(Object s: arg){
            System.out.print(s+",");
        }
        System.out.println();
    }

    public static void main(String arg[]){
        //下面的調(diào)用時是可運行的
      varArgs("hi",1,new double[]{});
    }
}

7.典型的應用

比如java的System.out.printf()方法

//前面的第一個參數(shù)是格式字符串,后面的參數(shù)就是可變參數(shù)列表
System.out.printf("%s,%d/%d/%d","cendeal",2019,3,17);

下面是其源碼定義

//System是java的類,out是System類的類成員,out是PrintStream對象,printf()是PrintStream的成員方法,所以訪問就是System.out.printf() 
public class PrintStream extends FilterOutputStream
    implements Appendable, Closeable
{

//此處省略該類其他代碼

public PrintStream printf(String format, Object ... args) {
        return format(format, args);
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容