當呼叫方法時,方法的引數個數或型別未知時,稱其為可變引數列表。可以使用object
陣列來實現這樣的功能。因為,所有的類都是直接或間接繼承於
object類。
1. 在沒有可變引數列表的時候,是用陣列實現類似的功能,看下面的例子:
class a1{}
public class varargs
public static void main(string args));
printarray(new object);
printarray(new object);
}}
tostring()方法的預設行為是,列印類的名字和物件的位址。
如下面的**:
class a{}
public class newvarargs
public static void main(string args));
printarray();
}}
3. 可變引數列表也可以使用
object
以外的型別,但是傳入引數為其他型別時,就會丟擲異常。
public class test }
public static void main(string args) }
class book
4. 可變引數列表中基本型別和非基本型別可以同時使用:
public class autoboxin**arargs
public static void main(string args)
}
5. 過載
編譯器會根據引數型別匹配最明確的方法,但可變引數列表仍然是過載變得不安全。
public class overloadin**arargs
static void f(integer...args)
static void f(long...args)
static void f(double...args)
public static void main(string args)
}
上面的例子得到了正確的匹配,但對語句f()
,編譯器就懵逼了。
我們可能想過在某乙個方法中增加乙個非可變引數來解決該問題,但這是不被允許的:
public class overloadin**arargs2
static void f(character...args)
public static void main(string args)
}
如果給兩個方法都新增乙個非可變引數,問題就解決了。即過載的方法必須保持一致的引數形式!
public class overloadin**arargs2
static void f(char c,character...args)
public static void main(string args)
}
可變引數列表
模擬實現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...
可變引數列表
測試環境 vs2008 1 可變引數列表 為什麼需要可變引數呢?在函式原型中,列出了函式期望接受的引數,原型只能顯示固定數目的引數,如果函式原型列出的引數與可呼叫引數不匹配或數目不一樣,程式將無法執行。例如,我們想要求一系列值的平均值,這裡的一系列的數目是不確定的,如果這些值儲存於陣列中,這個任務就...