<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技術
    主站蜘蛛池模板: 免费一级e一片在线播放| 1000部禁片黄的免费看| 日韩视频免费一区二区三区| 亚洲综合一区二区精品导航| 免费国产在线视频| 亚洲AV成人一区二区三区AV| 久草福利资源网站免费| 亚洲电影一区二区三区| 99久久99热精品免费观看国产| 亚洲一卡2卡三卡4卡有限公司| 99热这里有免费国产精品| 99人中文字幕亚洲区 | 一级特黄特色的免费大片视频| 国产成人精品123区免费视频| 色网站在线免费观看| 免费乱理伦在线播放| fc2免费人成在线| 亚洲第一精品福利| 国产一卡二卡3卡四卡免费| 亚洲中文字幕日本无线码| 日韩中文字幕免费| 国产免费人成视频在线播放播| 精品国产亚洲一区二区三区| 又粗又大又黑又长的免费视频| 亚洲欧美日韩国产成人| 亚洲成A人片在线观看无码3D| 丝瓜app免费下载网址进入ios | 亚洲日韩国产精品乱| 国产啪精品视频网站免费尤物 | 一本久久综合亚洲鲁鲁五月天 | 亚洲一区二区三区高清在线观看| 亚洲&#228;v永久无码精品天堂久久 | 亚洲综合一区无码精品| 婷婷亚洲天堂影院| 24小时日本韩国高清免费| 亚洲av成人一区二区三区观看在线 | 国产精品亚洲一区二区三区| 中文字幕亚洲一区| 皇色在线视频免费网站| www免费插插视频| 中文文字幕文字幕亚洲色|