




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第Java中方法優(yōu)先調(diào)用可選參數(shù)還是固定參數(shù)目錄固定參數(shù)可選參數(shù)注意事項1.可選參數(shù)是從0到無窮2.一個方法只能有一個可選參數(shù)3.可選參數(shù)必須要放在方法最后4.可選參數(shù)和其他同名方法組成方法重載優(yōu)先調(diào)用固定參數(shù)還是可選參數(shù)?結(jié)論原因分析第1優(yōu)先級:精準(zhǔn)參數(shù)匹配第2優(yōu)先級:調(diào)用基本類型自動轉(zhuǎn)換成更大的基本類型第3優(yōu)先級:自動裝/拆箱匹配第4優(yōu)先級:按照繼承路線依次向上匹配父類第5優(yōu)先級:可選參數(shù)匹配總結(jié)前言:
可選參數(shù)(varargs)是JDK5中新增的特性,也叫變長參數(shù)或可變參數(shù)。它是指一個方法的參數(shù)中可以用...來表示此方法可以接受無窮個參數(shù),這種表示方法就叫可選參數(shù)。
可選參數(shù)的語法如下:
publicvoidmethod(數(shù)據(jù)類型...參數(shù)名稱){
//方法體
}
可選參數(shù)基本用法如下:
publicclassArgumentExample{
publicstaticvoidmain(String[]args){
//調(diào)用可選參數(shù)
method("Java");
System.out.println();
//調(diào)用可選參數(shù)
method("MySQL","Redis");
//調(diào)用可選參數(shù)
System.out.println();
method("Spring","SpringMVC","SpringBoot");
*可選參數(shù)方法
publicstaticvoidmethod(String...names){
for(Stringitem:names){
System.out.println(item);
}
以上程序的執(zhí)行結(jié)果如下圖所示:
固定參數(shù)
固定參數(shù)的概念恰好與可選參數(shù)相反,固定參數(shù)也就是普通的參數(shù),一個方法中有固定的參數(shù)類型和個數(shù)且沒有...修飾就是固定參數(shù)。JDK5之前所有的方法傳參都是固定參數(shù),如下代碼所示:
publicclassArgumentExample{
publicstaticvoidmain(String[]args){
method("Java");
*固定參數(shù)方法
publicstaticvoidmethod(Stringname){
System.out.println("固定參數(shù):"+name);
}
可選參數(shù)注意事項
可選參數(shù)在使用時要注意以下4個問題。
1.可選參數(shù)是從0到無窮
可選參數(shù)的調(diào)用個數(shù)是從0到無窮,而不是從1到無窮,這點需要注意一下,如以下代碼所示:
publicclassArgumentExample{
publicstaticvoidmain(String[]args){
method();
*可選參數(shù)方法
publicstaticvoidmethod(String...names){
System.out.println("可選參數(shù)數(shù)量:"+names.length);
}
以上程序的執(zhí)行結(jié)果如下圖所示:
從上述代碼可以看出,可選參數(shù)即使不傳遞任何參數(shù),也就是0個參數(shù),也是能正常調(diào)用到的。
2.一個方法只能有一個可選參數(shù)
一個方法中只能有一個可選參數(shù),如果有多個可選參數(shù)程序會報錯,如下圖所示:
3.可選參數(shù)必須要放在方法最后
可選參數(shù)如果不放在方法參數(shù)的最后面,那么編譯器也會報錯,如下圖所示:
4.可選參數(shù)和其他同名方法組成方法重載
可選參數(shù)和其他的同名方法可以并存,并且它們組成了方法重載,如下代碼所示:
優(yōu)先調(diào)用固定參數(shù)還是可選參數(shù)?
基本知識點介紹完,接下來咱們回到本文的主題,當(dāng)一個方法中有兩類參數(shù):固定參數(shù)和可選參數(shù)時,究竟是先調(diào)用固定參數(shù)呢?還是先調(diào)用可選參數(shù)呢?接下來咱們使用一段代碼來測試一下:
publicclassArgumentExample{
publicstaticvoidmain(String[]args){
method("磊哥聊編程");
*固定參數(shù)方法
publicstaticvoidmethod(Stringname){
System.out.println("調(diào)用固定參數(shù):"+name);
*可選參數(shù)方法
publicstaticvoidmethod(String...names){
System.out.println("調(diào)用可選參數(shù):"+names.length);
}
以上程序的執(zhí)行結(jié)果如下:
結(jié)論
從上面的結(jié)果可以看出,當(dāng)程序中有固定參數(shù)和可選參數(shù)時,優(yōu)先調(diào)用固定參數(shù),而非可選參數(shù)。
原因分析
看到這,可能有朋友已經(jīng)意識到了,如果你看過我上一篇Java中為什么不同的返回類型不算方法重載就全明白了,究竟是先調(diào)用可選參數(shù)還是固定參數(shù)?上一篇文章在介紹方法重載調(diào)用的優(yōu)先級規(guī)則里已經(jīng)說過了:其中可選參數(shù)的調(diào)用優(yōu)先級是最低的,在固定參數(shù)和可選參數(shù)之間還有其他的調(diào)用選項。因為有些朋友沒注意到,或者沒看到,所以我這里再簡單的回顧一下。
第1優(yōu)先級:精準(zhǔn)參數(shù)匹配
方法重載會優(yōu)先調(diào)用和方法參數(shù)類型一模一樣的固定參數(shù)方法。
第2優(yōu)先級:調(diào)用基本類型自動轉(zhuǎn)換成更大的基本類型
如果是基本數(shù)據(jù)類型,那么方法重載調(diào)用的第2匹配原則是自動轉(zhuǎn)換成更大的基本數(shù)據(jù)類型,
如以下代碼:
publicclassOverloadExample{
publicstaticvoidmain(String[]args){
OverloadExampleexample=newOverloadExample();
example.method(12);
publicvoidmethod(longnum){
System.out.println("調(diào)用long方法");
publicvoidmethod(Integernum){
System.out.println("調(diào)用Integer方法");
publicvoidmethod(Objectnum){
System.out.println("調(diào)用Object方法");
publicvoidmethod(int...num){//可選參數(shù)
System.out.println("調(diào)用int...方法");
}
以上程序的執(zhí)行結(jié)果如下圖所示:
第3優(yōu)先級:自動裝/拆箱匹配
如果存在基本類型對應(yīng)的包裝類型,或者是包裝類型對應(yīng)的基本類型的方法重載,那么會優(yōu)先調(diào)用自動裝箱或自動拆箱的方法重載,
以下代碼所示:
publicclassOverloadExample{
publicstaticvoidmain(String[]args){
OverloadExampleexample=newOverloadExample();
example.method(12);
publicvoidmethod(Integernum){
System.out.println("調(diào)用Integer方法");
publicvoidmethod(Objectnum){
System.out.println("調(diào)用Object方法");
publicvoidmethod(int...num){//可選參數(shù)
System.out.println("調(diào)用int...方法");
}
以上程序的執(zhí)行結(jié)果如下圖所示:
第4優(yōu)先級:按照繼承路線依次向上匹配父類
當(dāng)有父類參數(shù)時會優(yōu)先調(diào)用父類重載方法,如下代碼所示:
publicclassOverloadExample{
publicstaticvoidmain(String[]args){
OverloadExampleexample=newOverloadExample();
example.method(12);
publicvoidmethod(Objectnum){
System.out.println("調(diào)用Object方法");
publicvoidmethod(int...num){//可選參數(shù)
System.out.println("調(diào)用int...方法");
}
以上程序的執(zhí)行
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒消防演練方案
- 少先隊主題活動方案
- 第2單元 第1課 國殤
- 部編版二年級語文暑假下冊復(fù)習(xí)特訓(xùn)卷(第四單元)(含答案)
- 2026屆四川省普通高中化學(xué)高二第一學(xué)期期末檢測試題含答案
- 巨人旳花園課件
- 左甲狀腺素鈉片課件
- 工資集體協(xié)商過程
- 2024年河北省大名縣第十中學(xué)中考模擬道德與法治試卷
- 山東省菏澤市加定陶山大附中、思源學(xué)校、鄆城一中等十校2026屆化學(xué)高二上期中達(dá)標(biāo)檢測試題含解析
- SWITCH暗黑破壞神3超級金手指修改 版本號:2.7.6.90885
- 水工閘門課件
- 通信原理教案
- 2.AD830機臺板面操作講解
- 《諾丁山》經(jīng)典臺詞
- 職高英語詞匯表優(yōu)質(zhì)資料
- YY/T 0752-2009電動骨組織手術(shù)設(shè)備
- GB/T 40080-2021鋼管無損檢測用于確認(rèn)無縫和焊接鋼管(埋弧焊除外)水壓密實性的自動電磁檢測方法
- GB/T 2-2001緊固件外螺紋零件的末端
- 路基土石方工程施工方案
- 教育評價學(xué)全套ppt課件完整版教學(xué)教程
評論
0/150
提交評論