Java基礎 基礎語法 可變引數

2021-09-05 10:04:49 字數 1879 閱讀 7713

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

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.注意 每個方法最多只有乙個可變引數,因為 可變引數必須是方法的最後乙個引數 可變引數可以設定為任意型別 引用型別,基本型別 當然也會進行型別檢查的 可變引數完全可以當作乙個陣列來使用,...