Object objects 動態 可變引數

2021-09-26 10:44:19 字數 1447 閱讀 8619

如果有下面的乙個筆試題:

已知我們有如下的呼叫關係 

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 建立乙...