可變引數簡介:在不確定引數的個數時,可以使用可變的引數列表。
1.語法:
引數型別
...(三個點)
例如:注意:每個方法最多只有乙個可變引數,因為:可變引數必須是方法的最後乙個引數void printarray
(object...
)
2.可變引數的型別
可變引數可以設定為
任意型別:引用型別,基本型別;
當然也會進行型別檢查的;
3.引數的個數:
4.可變引數的使用
可變引數完全可以當作乙個陣列來使用,或者說,本質上可變引數就是乙個陣列(下面詳細介紹)。所以,陣列擁有的方法、屬性,可變引數一樣擁有。
public上面的例子中,可變引數的使用跟陣列的使用是完全一樣,也就是說,void
varargmethod
(int
b,int
... arr)
//foreach
迴圈遍歷
for(int
ele:arr) }
可變引數是可以等價成陣列的
5.可變引數的方法過載
可變引數列表的方法的過載不同於普通方法:
無法僅通過改變
可變引數的型別,來過載方法。 如:
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)。
現在看來,可變引數列表並沒有多神奇,只不過是將程式設計師做的工作簡化了,交給了編譯器來處理。最後,
可變引數的使用和陣列一樣也就不出奇了,因為可變引數最後還是被編譯器處理成了陣列,可變引數就是陣列。
Java基礎 可變引數
在 jdk1.5之後,如果我們定義乙個方法需要接受多個引數,並且多個引數型別一致,我們可以對其簡化成如下格式 修飾符 返回值型別 方法名 引數型別.形參名 其實這個書寫完全等價與 修飾符 返回值型別 方法名 引數型別 形參名 只是後面這種定義,在呼叫時必須傳遞陣列,而前者可以直接傳遞資料即可。同樣是...
JAVA基礎加強09 可變引數
問題 乙個方法接受的引數個數不固定,例如 system.out.println countscore 2,3,5 system.out.println countscore 1,2,3,5 可變引數的特點 只能出現在引數列表的最後 這個要記住 位於變數型別和變數名之間,前後有無空格都可以 呼叫可變引...
java基礎 九 可變引數列表介紹
在不確定引數的個數時,可以使用可變的引數列表。引數型別 三個點 例如 void printarray object.注意 每個方法最多只有乙個可變引數,因為 可變引數必須是方法的最後乙個引數 可變引數可以設定為任意型別 引用型別,基本型別 當然也會進行型別檢查的 可變引數完全可以當作乙個陣列來使用,...