<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技術
    主站蜘蛛池模板: 免费日本一区二区| 暖暖免费中文在线日本| 97久久免费视频| 亚洲va在线va天堂va四虎| 三级网站在线免费观看| 亚洲精品成人无限看| 热久久这里是精品6免费观看| 亚洲精品乱码久久久久久久久久久久| 国产精品青草视频免费播放| 亚洲午夜av影院| 人妻免费一区二区三区最新| 亚洲视频在线观看一区| 1000部无遮挡拍拍拍免费视频观看| 亚洲国产美女福利直播秀一区二区 | 亚洲aⅴ无码专区在线观看春色| 天天摸天天操免费播放小视频| 亚洲欧洲国产综合AV无码久久| 国产伦精品一区二区三区免费迷 | 在线观看免费黄网站| 亚洲成a人片在线观看无码专区| 午夜无码A级毛片免费视频| 亚洲欧洲国产综合| 妞干网免费视频在线观看| 婷婷亚洲综合一区二区| 国产啪亚洲国产精品无码| 日韩免费高清大片在线| 亚洲AV色吊丝无码| 午夜亚洲福利在线老司机| 九九美女网站免费| 亚洲一区二区三区高清在线观看| 国产zzjjzzjj视频全免费| 插鸡网站在线播放免费观看| 18亚洲男同志videos网站| 日本高清免费不卡视频| a级毛片在线免费观看| 亚洲午夜电影在线观看| 免费在线观看亚洲| 8x8×在线永久免费视频| 综合一区自拍亚洲综合图区| 亚洲国产精品无码久久SM| 成人性生交视频免费观看|