隨筆-42  評論-578  文章-1  trackbacks-0

          JDK1.5引進了方法的可變參數,受到許多開發人員的青睞。有了這種機制,我們可以寫出類似于JavaScript的arguments那樣的帶任意多個參數的方法。Java的可變參數,可用于普通方法上,也可以用于構造方法上,大大增大了我們所寫方法的適用范圍。


          然而,使用可變參數時,要注意幾個問題:

           

          1) 可變參數方法與數組參數方法重載時

           

          public class MethodParams{
          //帶可變參數的方法
          public void hello(String ...params) {
          System.out.println("執行帶可變參數的方法,參數個數為:" + params.length);
          }
          //帶數組參數的方法
          public void hello(String[] params) {
          System.out.println("執行帶數組參數的方法,數組長度為:" + params.length);
          }
          }

          我們寫個測試代碼運行一下看看結果如何:

          	MethodParams mp = new MethodParams();
          mp.hello("AAA","BBB","CCC");

            編譯時報錯:

          MethodParams.java:7: 無法在 MethodParams 中同時聲明 hello(java.lang.String[]) 和
          hello(java.lang.String...)
          public void hello(String[] params) {
          ^
          1 錯誤

          結論: JDK不允許存在, 帶可變參數的方法和帶數組參數的方法在同一類中重載。

          可變參數==數組參數? 在帶可變參數的方法體時,讀取可變參數列表時,就是以數組的方式來讀取;

          帶可變參數的方法可以傳入一個數組參數,但帶數組參數的方法卻不能傳入可變參數。

           

           

          2) 可變參數方法與可變參數方法重載時

          	//帶可變參數的方法
          public void hello(String ...params) {
          System.out.println("執行帶可變參數的方法,參數個數為:" + params.length);
          }
          //帶固定參數和可變參數
          public void hello(String param1, String ...params) {
          System.out.println("執行帶固定參數和可變參數的方法,參數個數為:" + params.length);
          }

            測試代碼跟上例中一樣,編譯時報錯:

          MethodParams.java:18: 對 hello 的引用不明確,MethodParams 中的 方法 hello(java.l
          ang.String...) 和 MethodParams 中的 方法 hello(java.lang.String,java.lang.String
          ...) 都匹配
          mp.hello("AAA","BBB","CCC");
          ^
          1 錯誤

           結論:JDK不允許存在,帶相同參數類型列表(Type List)的參數列表的方法在同一類中重載。

           

           

          3)可變參數方法與無參數方法重載時

          	//帶可變參數的方法
          public void hello(String ...params) {
          System.out.println("執行帶可變參數的方法,參數個數為:" + params.length);
          }
          //不帶參數的方法
          public void hello() {
          System.out.println("執行不帶參數的方法");
          }

          我們都知道,可變參數即可帶0個或者多個參數,如果帶0個參數即不帶參數時,JDK會怎么處理呢?

          那我們就以執行"mp.hello()"來測試一下。編譯通過,運行正常,調用的還帶參數的hello()方法。

          結論:當可變參數方法與不帶參數的方法重載時,JDK默認調用的是無參數的方法。若類中沒有定義無參數的方法,則會調用可變參數的方法。



          本文原創,轉載請注明出處,謝謝!http://www.aygfsteel.com/rongxh7(心夢帆影JavaEE技術博客)
              

          posted on 2010-04-18 23:59 心夢帆影 閱讀(5878) 評論(0)  編輯  收藏 所屬分類: JavaSE
          主站蜘蛛池模板: 鹿邑县| 吐鲁番市| 平江县| 沛县| 孟连| 宁河县| 古蔺县| 焉耆| 仁布县| 台南县| 海城市| 梅州市| 信宜市| 曲靖市| 从江县| 东源县| 西华县| 海伦市| 子洲县| 饶平县| 龙岩市| 涿鹿县| 甘洛县| 贵德县| 高陵县| 兰考县| 遂川县| 宽甸| 东至县| 崇左市| 嘉兴市| 措勤县| 通州区| 宝山区| 三穗县| 贞丰县| 长宁县| 宜兰市| 苏尼特右旗| 郯城县| 安康市|