java基礎 九 可變引數列表介紹

2021-08-16 02:06:26 字數 1416 閱讀 6048

在不確定引數的個數時,可以使用可變的引數列表。

引數型別…(三個點)

例如:void printarray(object...)

注意:每個方法最多只有乙個可變引數,因為:可變引數必須是方法的最後乙個引數

可變引數可以設定為任意型別:引用型別,基本型別;當然也會進行型別檢查的;

可變引數完全可以當作乙個陣列來使用,或者說,本質上可變引數就是乙個陣列(下面詳細介紹)。所以,陣列擁有的方法、屬性,可變引數一樣擁有。

public

void

varargmethod(int b,int... arr)

//foreach迴圈遍歷

for(int ele:arr)

}

上面的例子中,可變引數的使用跟陣列的使用是完全一樣,也就是說,可變引數是可以等價成陣列的

可變引數列表的方法的過載不同於普通方法:無法僅通過改變 可變引數的型別,來過載方法

如:vararray(int... a)vararray(object... a),這兩個方法在呼叫時會出錯,方法過載失敗。

前面已經很詳細地介紹了可變引數的各個方面。這一小節將深入去了解可變引數的實現原理,特別是為什麼可變引數的使用與陣列是一樣的。

看下面乙個簡單的例子:

public

class mytest

public

static

void

varargmethod(int b,int... arr)

}}

例子很簡單,為了了解編譯器是怎麼處理的,我們用jad對上面例子的class檔案進行反編譯:

public

class mytest );//引數列表被編譯器處理成了乙個int陣列

}public

static transient void

varargmethod(int b, int arr)

}

從反編譯的結果可以看出,編譯器不僅將可變引數處理成陣列varargmethod(int b, int arr),還處理了呼叫可變引數方法處的引數列表,把引數列表封裝進乙個陣列varargmethod(5, new int)

現在看來,可變引數列表並沒有多神奇,只不過是將程式設計師做的工作簡化了,交給了編譯器來處理。最後,可變引數的使用和陣列一樣也就不出奇了,因為可變引數最後還是被編譯器處理成了陣列,可變引數就是陣列

出處:

可變引數列表與列舉介紹

1 可變引數列表 public class optionalarguments public void main string args 輸出 required 1 one required 2 one two required 0 2 列舉 列舉就是常量的集合。如 public enum enum...

可變引數列表

模擬實現printf函式 va list是在c語言中解決變參問題的一組巨集,所在標頭檔案 include 用於獲取不確定個數的引數 va start,函式名稱,讀取可變引數的過程其實就是在堆疊中,使用指標,遍歷堆疊段中的引數列表,從低位址到高位址乙個乙個地把引數內容讀出來的過程 va arg,這個巨...

可變引數列表

小二,上 class a public class varargs two param static void twostringparam string a,string b three param 參照上兩種寫法,一直往後面加。是不是感覺很憂傷 幸好這不是真的。string.a static v...