<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-72  評論-20  文章-0  trackbacks-1
    1.可變參數列表的簡單實現
    當調用方法時,方法的參數個數或類型未知時,稱其為可變參數列表。在以前的Java代碼中,可以使用Object數組來實現這樣的功能。因為,所有的類都是直接或間接繼承于Object類。
     
    VarArgs.java
    package sample;
     
    class A1{}
     
    public class VarArgs {
           static void printArray(Object[] args){
                  for(Object obj:args)
                         System.out.print(obj+" ");
                  System.out.println();
           }
     
           public static void main(String[] args){
                  printArray(new Object[]{
                         new Integer(47),new Float(3.14),new Double(11.11) 
                  });
                  printArray(new Object[]{"one","two","three"});
                  printArray(new Object[]{new A1(),new A1(),new A1()});
           }
    }
     
    結果:
    47 3.14 11.11
    one two three
    sample.A1@a90653 sample.A1@de6ced sample.A1@c17164
     
    這里printArray方法使用Object數組作為參數,并使用foreach語法遍歷數組,打印每個對象。
     
    2.Java SE5實現可變參數列表
    同樣的方法,參數可以這樣定義,(Object…args),這樣達到同樣的效果。
     
    NewVarArgs.java
    package sample;
     
    class A{}
     
    public class NewVarArgs {
           static void printArray(Object...args){
                  for(Object obj:args)
                         System.out.print(obj+" ");
                  System.out.println();
           }
     
           public static void main(String[] args){
                  printArray(new Integer(47),new Float(3.14),new Double(11.11));
                  printArray(47,
                  printArray("one","two","three");
                  printArray(new A(),new A(),new A());
                  printArray((Object[])new Integer[]{1,2,3,4});
                  printArray();
           }
    }
     
    結果:
    47 3.14 11.11
    47 3.14 11.11
    one two three
    sample.A@a90653 sample.A@de6ced sample.A@c17164
    1 2 3 4
     
    這里沒有顯式的使用數組作為參數,但編譯器實際上會為你填充數組。所以同樣可以使用foreach語法來遍歷之。
    注意倒數第二行,編譯器已經發現它是一個數組,所以不會在其上執行任何轉換。最后一行表明,可以傳遞零個參數。
    也可以指定所有可變參數的類型,下面的程序指定所有可變參數都必須是String。
     
    OptionalArguments.java
    package sample;
     
    public class OptionalArguments {
           static void f(String...trailing){
                  for(String s:trailing)
                         System.out.print(s+" ");
                  System.out.println();
           }
     
           public static void main(String[] args){
                  f("one");
                  f("two","three");
                  f();
           }
    }
     
    結果:
    one
    two three
     
    可以在可變參數列表中同時使用原始類型與包裝類。
     
    AutoboxingVarargs.java
    package sample;
     
    public class AutoboxingVarargs {
           public static void f(Integer...args){
                  for(Integer i:args)
                         System.out.print(i+" ");
                  System.out.println();
           }
     
           public static void main(String[] args){
                  f(new Integer(1),new Integer(2));
                  f(3,4,5,6,7,8,9);
                  f(10,new Integer(11),12);
           }
    }
     
    結果:
    1 2
    3 4 5 6 7 8 9
    10 11 12
     
    3.可變參數列表的重載(Overloading)
    如果出現重載的情況,則編譯器會自動調用最適合的方法匹配之。
     
    OverloadingVarargs.java
    package sample;
     
    public class OverloadingVarargs {
           static void f(Character...args){
                  System.out.print("first ");
                  for(Character c:args)
                         System.out.print(c+" ");
                  System.out.println();
           }
     
           static void f(Integer...args){
                  System.out.print("second ");
                  for(Integer i:args)
                         System.out.print(i+" ");
                  System.out.println();
           }
          
           static void f(Long...args){
                  System.out.print("third ");
                  for(Long l:args)
                         System.out.print(l+" ");
                  System.out.println();
           }
          
           static void f(Double...args){
                  System.out.print("forth ");
                  for(Double d:args)
                         System.out.print(d+" ");
                  System.out.println();
           }
          
           public static void main(String[] args){
                  f('a','b','c');
                  f(1);
                  f(2,1);
                  f(0.1);
                  f(
           }
    }
     
    結果:
    first a b c
    second 1
    second 2 1
    forth 0.1
    third 0
     
    但下面的情況是不允許的,即某個方法中增加一個非可變參數。
     
    OverloadingVarargs2.java
    package sample;
     
    public class OverloadingVarargs2 {
           static void f(float i,Character...args){
                  System.out.println("first");
           }
     
           static void f(Character...args){
                  System.out.println("second");
           }
          
           public static void main(String[] args){
                  f(1,'a');
                  f('a','b');//Error
           }
    }
     
    但可以這樣解決問題。
    package sample;
     
    public class OverloadingVarargs2 {
           static void f(float i,Character...args){
                  System.out.println("first");
           }
     
           static void f(char c,Character...args){
                  System.out.println("second");
           }
          
           public static void main(String[] args){
                  f(1,'a');
                  f('a','b');
           }
    }
    即重載的方法必須保持一致的參數形式。

    posted on 2007-08-19 05:03 前方的路 閱讀(6783) 評論(0)  編輯  收藏 所屬分類: Java技術
    主站蜘蛛池模板: 日韩亚洲人成在线| 国产三级在线免费观看| 91热成人精品国产免费| 毛片a级毛片免费观看免下载 | 亚洲av成本人无码网站| 成年女性特黄午夜视频免费看| 亚洲国产精品久久网午夜| 国产高清免费视频| 亚洲中文字幕无码av永久| 免费视频淫片aa毛片| 精品国产_亚洲人成在线| 91嫩草免费国产永久入口| 亚洲av无码电影网| 国产在线不卡免费播放| 人人鲁免费播放视频人人香蕉| 亚洲码国产精品高潮在线| 日韩精品免费视频| 亚洲AⅤ视频一区二区三区| 久久亚洲AV无码精品色午夜麻豆 | 男女免费观看在线爽爽爽视频| 亚洲日本一区二区一本一道| 日本精品久久久久久久久免费| 国产精品亚洲αv天堂无码| 无码囯产精品一区二区免费| 国产成人免费福利网站| 免费大片av手机看片| 亚洲AV无码一区二区三区DV| 在线观看免费亚洲| 久久久无码精品亚洲日韩软件| 久久一本岛在免费线观看2020| 亚洲一区二区三区不卡在线播放| 日韩一级免费视频| 三年片免费高清版| 亚洲午夜电影在线观看高清| 国产免费69成人精品视频| 亚洲www77777| 伊人久久亚洲综合| 一级做a爱过程免费视频高清| 亚洲成a人片在线观看中文动漫| 中国人免费观看高清在线观看二区| 亚洲国产精品一区|