成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何應用Java的可變參數

開發 后端
Java語言在JDK1.5中首次推出Java可變參數,即variable arguments,或簡稱varargs。

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 張新

怎樣工作

       Java可變參數也不神秘。實際上,JVM將根據程序中調用這個方法時提供的參數數量,來裝載和運行它。
       可變參數的簡單語法格式為:
 
methodName([argumentList], dataType...argumentName);
 
       其中:
       argumentList——普通參數,可選項。
       dataType——數據類型或者類。自動轉換成dataType代表的數組。
       ...——Java的操作符。表示0到多個。必須是3個點。
       argumentName——參數名。
       注意,可變參數必須在最后。
       下面是應用可變參數的更多例子:
 
// 完整程序存在本書配套資源目錄Ch12名為VarargsTest.java
public static int sumInts(int...numbers) {  //可變整數數組類型參數
    int sum = 0;
    for (int num : numbers)
        sum +=num;
    return sum;
}      
 
       再如:
 
public void totalTax(String name, double rate, double...amount) { 
                                            //
普通參數在前、可變參數在后
    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) {
        ...
    }
}
 
       但無法在子類中調用超類的這個構造器。
      更多信息  可變參數可以用在構造器中,并可以覆蓋。

Java可變參數方法重載

       可以對具有可變參數的方法重載。如下例子:
 
void someMethod(int count, double...prices) {
    //語句體
    ...
    }
void someMethod(double...prices) {              //重載
    //語句體
    ...
    }
double someMethod(String...names) {             //重載
    //語句體
    ...
}
...
 
       對方法someMethod()實行重載。對具有可變參數的方法重載遵循一般方法重載原則。
       如下程序應用枚舉和可變參數,對在12.4.4討論過的根據用戶要求打印跑車信息的程序進一步修改,使之具有更強功能。首先,在程序中加入了如下兩個用來處理跑車顏色和付款方式的枚舉類型對象:
 
//完整程序存在本書配套資源目錄Ch12名為VarargsApp.java
enum ColorType {
    WHITE {String getDescription(){
                return "有淺白、暗白、和亮白可選";
            }
    },
    SILVER {String getDescription() {
                return "有銀白、銀灰、純銀色可選";
            }
    },
    BLACK {String getDescription() {
                return "有深黑和淺黑可選";
            }
    };
    abstract String getDescription();
}
enum PaymentType {
    CASH("10%特別優惠"),
    CREDIT("接受所有信用卡"),
    LOAN("貸款利息為.56%");
    final private String payment;
    private PaymentType(String payment) {
        this. payment = payment;
    }
    public String getPayment() {
        return payment;
    }
}
 
另外,在SportCar中,根據用戶的選擇,加入了對跑車類型、顏色,以及付款方式的處理方法,并且利用可變參數。例如:
 
class SportCar {
    SportCarType type;                      //創建
    ColorType color;
    PaymentType payment;
    public SportCar (String...choices) {    //可變參數
        type = null;                        //初始化
        color = null;
        payment = null;
        processInfo(choices);               //調用處理信息方法
   }
   private void processInfo(String[] choices) {
       if (choices.length == 1) {           //處理跑車類型
          processType(choices[0]);
        }
       else if (choices.length == 2) {      //處理跑車類型和顏色
         processType(choices[0]);
         processColor(choices[1]);
        }
       else if (choices.length == 3) {      //處理跑車類型、顏色和付款方式
         processType(choices[0]);
         processColor(choices[1]);
         processPayment(choices[2]);
       }
 }
 private void processType(String type) {    //處理類型
        if (type.equals("P"))
            this.type = SportCarType.PORSCHE;
        else if (type.equals("F"))
           this.type = SportCarType.FERRARI;
        else if(type.equals("J"))
            this.type = SportCarType.JAGUAR;
}
...
 
這個類的驅動程序如下:
 
public class VarargsApp {
   public static void main( String args[] ) {
     SportCar yourCar = new SportCar("P");          //創建一個參數的對象
     System.out.println("你要的跑車信息:\n" + yourCar + "\n");
 
     SportCar myCar = new SportCar("J", "S");       //創建兩個參數的對象
     System.out.println("我要的跑車信息:\n" + myCar + "\n");
 
     SportCar herCar = new SportCar("F", "B", "C");//創建三個參數的對象
     System.out.println("她要的跑車信息:\n" + herCar + "\n");
    }
}
 
運行結果如下:
 
你要的跑車信息:
制造國:德國
價格:$120,000.00
 
我要的跑車信息:
制造國:英國
價格:$110,000.00
有銀白、銀灰、純銀色可選
 
她要的跑車信息:
制造國: 意大利
價格:$150,000.00
有深黑和淺黑可選
10%特別優惠
 

【編輯推薦】

  1. Red Hat CEO呼吁甲骨文繼續保持Java開放
  2. 自學Javabean迅速成為Java高手
  3. Java通過JNI調用C語言的方法
  4. 高手Java核心技術學習筆記
  5. 成為Java高手需要注意的25個學習目標
責任編輯:王觀 來源: 中國IT實驗室
相關推薦

2021-01-06 05:29:04

C語言參數應用

2022-01-17 07:32:34

Java參數方法

2011-05-13 17:25:34

C

2024-01-17 06:23:35

SwiftTypeScript定義函數

2012-09-18 13:26:39

CC++

2011-08-01 17:11:43

Objective-C 函數

2009-12-07 19:34:01

PHP函數可變參數列表

2024-04-26 06:35:54

Rust&mutmu

2021-03-03 08:57:46

java死鎖線程

2009-06-17 13:18:21

BigDecimal類Java

2010-02-03 15:06:02

C++可變參數表

2024-04-08 07:58:11

Python數據類型字符串

2022-11-14 07:08:23

Python函數參數

2015-10-12 08:56:27

Java不可變

2021-06-14 09:34:23

對象存儲存儲

2021-08-30 09:56:59

Web安全攻擊Java

2022-11-26 08:03:57

StringJava

2010-04-29 16:15:06

Oracle flas

2020-09-04 11:02:47

Java技巧參數

2010-03-17 16:49:40

Java綠色線程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 污书屋| 羞羞视频网站免费观看 | 亚洲人成人一区二区在线观看 | 久久骚 | 国产精品成人一区二区三区 | 极品的亚洲 | 国产精品99久久久久久动医院 | 亚洲中午字幕 | 成年无码av片在线 | 日本在线免费 | 日本高清视频网站 | 一级在线毛片 | 久久爱黑人激情av摘花 | 亚洲aⅴ | 成人在线免费观看 | 草草视频在线免费观看 | 精品影院 | 日韩一级免费电影 | 91婷婷韩国欧美一区二区 | 天堂网avav | 日韩手机在线看片 | 色网站视频 | 99久久99| 亚洲综合二区 | 天天色天天射天天干 | 欧美日韩在线综合 | 日韩三级电影在线看 | 亚洲免费视频网站 | 久久精品网| 欧美黄色性生活视频 | 精品九九九 | 狠狠操你 | 国产日韩一区二区三免费高清 | 久久久久国产精品一区 | 中文字幕亚洲在线 | 欧美一区2区三区4区公司二百 | 精品一区电影 | 国产一级一级国产 | 亚洲精品v | 精品91视频 | 狠狠色狠狠色综合日日92 |