如果有下面的乙個筆試題:
已知我們有如下的呼叫關係
logit(」log message 1 「);
logit(」log message2」, " log message3」);
logit(」log message4」,"log message5」,"log message6");
請問下面的答案中哪個是正確的
a. public void logit(string * msgs)
b. public void logit(string msgs)
c. public void logit(string... msgs)
d. public void logit(string msg1, string msg2, string msg3)
答案:?
現在我們在coding的時候,偶爾會出現這樣的一些方法:
public void paintreportchart(int i, string... args)
首先這是jdk1.5之後的新特性,我們叫它為可變引數,即 varargs 。 之前我們定義可變引數是採用string args的方法來宣告。jdk1.5之後有了更加簡便的方式。
事實上string args 和 string... args 本質上不沒有什麼區別,string... args 最後還是轉化成string args 來做的,只是string... args這種形式在應用上更加的靈活和簡便。
例如有下面的兩個方法:
public static void callme1(string args)
} public static void callme2(string... args)
}他們可以這樣子被呼叫:
callme1(new string );
callme2("a", "b", "c");
callme2(new string );
但是不能
lme1("a", "b", "c");
這就是string... args定義方法的靈活之處。並且當乙個方法定義中有string... args形參時,實參傳遞的引數個數可以是少於最大個數的任意個,可以不傳 引數。
但是這樣子定義在方便的同時也是要付出一定的代價的,那就是string...args只能定義在形參的最後乙個引數,而string args就沒有這樣的限制了。所以我們在定義的時候也就各取所需了。
通過上面的說明,我們可以知道文章開頭的答案應該是選 c
所以當有一天你發現這樣子定義main函式不要以為是錯的
public static void main(string... args)
不過要宣告的是:這種方法並不是官方推薦的方法,要盡量少用為妙,不然容易出現問題。
string ...args 是乙個不定長引數。
string args 是乙個陣列作為引數。
動態型別 動態繫結 動態載入
1.動態型別 執行時才知道,物件的型別,動態型別在程式設計中非常常見,簡單的說就是id型別 比如 在自定的時候就是,id型別。當前我們有時候自己定的方法,不確定,傳進來的是什麼型別的物件,我們也id型別,然後在方法內部去確定型別 2.動態繫結 物件被例項化後,就確定的物件型別,也確定了物件的屬性和響...
動態型別和動態繫結,動態載入
1.ios動態型別和動態繫結簡述 nsobject 也就是id型別 動態型別 動態繫結 先明白引用多型 父類指標可以指向子類物件 方法多型 方法名相同,方法的實現卻不同 動態繫結就是當程式執行的時候,才去查詢物件的型別.一種是靜態載入,一種動態載入 2.簡述你對uiview uiwindow和cal...
動態載入動態庫
message函式的宣告你應該知道吧,把它的宣告和下面的語句寫到乙個標頭檔案中 pragma comment lib,a.lib 然後你的對話方塊.cpp中包含這個標頭檔案就可以使用message函式了。如果dll沒有對應的.lib檔案,那麼就只能使用動態載入的方式了。動態呼叫動態庫步驟 1 建立乙...