隨筆-42  評(píng)論-578  文章-1  trackbacks-0

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


          然而,使用可變參數(shù)時(shí),要注意幾個(gè)問題:

           

          1) 可變參數(shù)方法與數(shù)組參數(shù)方法重載時(shí)

           

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

          我們寫個(gè)測(cè)試代碼運(yùn)行一下看看結(jié)果如何:

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

            編譯時(shí)報(bào)錯(cuò):

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

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

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

          帶可變參數(shù)的方法可以傳入一個(gè)數(shù)組參數(shù),但帶數(shù)組參數(shù)的方法卻不能傳入可變參數(shù)。

           

           

          2) 可變參數(shù)方法與可變參數(shù)方法重載時(shí)

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

            測(cè)試代碼跟上例中一樣,編譯時(shí)報(bào)錯(cuò):

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

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

           

           

          3)可變參數(shù)方法與無參數(shù)方法重載時(shí)

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

          我們都知道,可變參數(shù)即可帶0個(gè)或者多個(gè)參數(shù),如果帶0個(gè)參數(shù)即不帶參數(shù)時(shí),JDK會(huì)怎么處理呢?

          那我們就以執(zhí)行"mp.hello()"來測(cè)試一下。編譯通過,運(yùn)行正常,調(diào)用的還帶參數(shù)的hello()方法。

          結(jié)論:當(dāng)可變參數(shù)方法與不帶參數(shù)的方法重載時(shí),JDK默認(rèn)調(diào)用的是無參數(shù)的方法。若類中沒有定義無參數(shù)的方法,則會(huì)調(diào)用可變參數(shù)的方法。



          本文原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處,謝謝!http://www.aygfsteel.com/rongxh7(心夢(mèng)帆影JavaEE技術(shù)博客)
              

          posted on 2010-04-18 23:59 心夢(mèng)帆影 閱讀(5882) 評(píng)論(0)  編輯  收藏 所屬分類: JavaSE
          主站蜘蛛池模板: 金寨县| 富民县| 临邑县| 黄大仙区| 大田县| 济宁市| 夹江县| 芦溪县| 浪卡子县| 武陟县| 大庆市| 石渠县| 化隆| 龙海市| 东城区| 萝北县| 鄂托克旗| 六安市| 四子王旗| 庆阳市| 兴文县| 万年县| 兖州市| 额尔古纳市| 石狮市| 怀安县| 南开区| 会宁县| 达日县| 于都县| 富蕴县| 高密市| 托克逊县| 易门县| 永城市| 施秉县| 固安县| 祥云县| 绥中县| 武汉市| 来宾市|