如何應用Java的可變引數
阿新 • • 發佈:2019-01-02
Java可變引數
Java語言在JDK1.5中首次推出Java可變引數,variable arguments,或簡稱varargs。這一新語言特徵給軟體開發人員在編寫方法過載時提供了方便和靈活性。但可變引數的應用並不像想象的那麼簡單,使用時有其特殊要求和侷限性。過載的最好例子
讀者朋友可能有這樣的程式設計經歷:在編寫一個方法時,其引數隨著程式執行的條件而變化,在編譯期間無法確定。具體地講,例如編寫一個列印參加聚會party的程式,其中方法printInvitation()將根據作為引數的參加人姓名,列印邀請卡。但這個引數的數量事先並不確定。當然可以編寫許多過載的方法來解決這個問題,如: void printInvitation(String name); void printInvitation(String name1, String name2); void printInvitation(String name1, String name2, String name3); ... 問題是編寫多少個過載的方法才可以解決給所有參加者列印邀請卡?也許需要改變您的程式設計,而使用陣列或者連結表了。 應用可變引數可以方便、靈活地解決這類問題。例如: //完整程式存在本書配套資源目錄Ch12名為VarargsTest.java void printInvitation(String...names) { for (String name : names) { makeCard(name); //呼叫方法按照姓名列印邀請卡 System.out.println("Recording info: invitation card has been printed for " + name); } } 這裡,(String...names)便是可變引數。它包括從0到任意個相同型別的引數。在編譯期間,這個可變引數將被轉換為字串陣列形式,即: void printInvitation(String[] names) 如下是呼叫這個方法的例子: printInvitation("李剛", "David Smith"); printInvitation("Greg Wu", "Paul Nguyen", "Liu Wei", "張新"); printInvitation(); //無引數 當在無引數情況下呼叫這個方法時,將不執行任何這個方法中的程式碼。 如下是執行結果: Recording info: invitation card has been printed for 李剛 Recording info: invitation card has been printed for David Smith Recording info: invitation card has been printed for Greg Wu Recording info: invitation card has been printed for Paul Nguyen Recording info: invitation card has been printed for Liu Wei Recording info: invitation card has been printed for 張新怎樣工作
//普通引數在前、可變引數在後 double total = 0.0, tax = 0.0; for (double amount : amounts) total += amount; tax = total * rate; System.out.println("Name: " + name + "\nTotal: " + total + "\ntax: " + tax); } Java可變引數也可應用在構造器中。例如: public class Supper { public Supper(char...characters) { ... } 在子類中,可以覆蓋這個構造器,如: class SubClass extends Supper { public SubClass(char...characters) { ... } } 但無法在子類中呼叫超類的這個構造器。 更多資訊 可變引數可以用在構造器中,並可以覆蓋。