JDK1.5引進(jìn)了方法的可變參數(shù),受到許多開發(fā)人員的青睞。有了這種機(jī)制,我們可以寫出類似于JavaScript的arguments那樣的帶任意多個(gè)參數(shù)的方法。Java的可變參數(shù),可用于普通方法上,也可以用于構(gòu)造方法上,大大增大了我們所寫方法的適用范圍。
然而,使用可變參數(shù)時(shí),要注意幾個(gè)問(wèn)題:
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: 無(wú)法在 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ù)組的方式來(lái)讀取;
帶可變參數(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ù)方法與無(wú)參數(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()"來(lái)測(cè)試一下。編譯通過(guò),運(yùn)行正常,調(diào)用的還帶參數(shù)的hello()方法。
結(jié)論:當(dāng)可變參數(shù)方法與不帶參數(shù)的方法重載時(shí),JDK默認(rèn)調(diào)用的是無(wú)參數(shù)的方法。若類中沒有定義無(wú)參數(shù)的方法,則會(huì)調(diào)用可變參數(shù)的方法。
本文原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處,謝謝!http://www.tkk7.com/rongxh7(心夢(mèng)帆影JavaEE技術(shù)博客)
posted on 2010-04-18 23:59
心夢(mèng)帆影 閱讀(5868)
評(píng)論(0) 編輯 收藏 所屬分類:
JavaSE