成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試突擊:方法優(yōu)先調(diào)用可選參數(shù)還是固定參數(shù)?

開(kāi)發(fā) 前端
可選參數(shù)是 JDK 5 中新增的以“...”格式存在的參數(shù)類(lèi)型,可選參數(shù)可以匹配 0 到無(wú)窮個(gè)參數(shù),但一個(gè)方法中只能有一個(gè)可選參數(shù),且可選參數(shù)要放在方法參數(shù)的最后面。

作者:磊哥

來(lái)源 | Java面試真題解析(ID:aimianshi666)

轉(zhuǎn)載請(qǐng)聯(lián)系授權(quán)(微信ID:GG_Stone)

面試合集:https://gitee.com/mydb/interview

可選參數(shù)(varargs)是 JDK 5 中新增的特性,也叫變長(zhǎng)參數(shù)或可變參數(shù)。它是指一個(gè)方法的參數(shù)中可以用“...”來(lái)表示此方法可以接受無(wú)窮個(gè)參數(shù),這種表示方法就叫可選參數(shù)。可選參數(shù)的語(yǔ)法如下:

  1. public void method(數(shù)據(jù)類(lèi)型... 參數(shù)名稱(chēng)){ 
  2.     // 方法體 

可選參數(shù)基本用法如下:

  1. public class ArgumentExample { 
  2.     public static void main(String[] args) { 
  3.         // 調(diào)用可選參數(shù) 
  4.         method("Java"); 
  5.         System.out.println(); 
  6.         // 調(diào)用可選參數(shù) 
  7.         method("MySQL""Redis"); 
  8.         // 調(diào)用可選參數(shù) 
  9.         System.out.println(); 
  10.         method("Spring""Spring MVC""Spring Boot"); 
  11.     } 
  12.     /** 
  13.      * 可選參數(shù)方法 
  14.      */ 
  15.     public static void method(String... names) { 
  16.         for (String item : names) { 
  17.             System.out.println(item); 
  18.         } 
  19.     } 

以上程序的執(zhí)行結(jié)果如下圖所示:

固定參數(shù)

固定參數(shù)的概念恰好與可選參數(shù)相反,固定參數(shù)也就是普通的參數(shù),一個(gè)方法中有固定的參數(shù)類(lèi)型和個(gè)數(shù)且沒(méi)有“...”修飾就是固定參數(shù)。JDK 5 之前所有的方法傳參都是固定參數(shù),如下代碼所示:

  1. public class ArgumentExample { 
  2.     public static void main(String[] args) { 
  3.         method("Java"); 
  4.     } 
  5.     /** 
  6.      * 固定參數(shù)方法 
  7.      */ 
  8.     public static void method(String name) { 
  9.         System.out.println("固定參數(shù):" + name); 
  10.     } 

可選參數(shù)注意事項(xiàng)

可選參數(shù)在使用時(shí)要注意以下 4 個(gè)問(wèn)題。

1.可選參數(shù)是從0到無(wú)窮

可選參數(shù)的調(diào)用個(gè)數(shù)是從 0 到無(wú)窮,而不是從 1 到無(wú)窮,這點(diǎn)需要注意一下,如以下代碼所示:

  1. public class ArgumentExample { 
  2.     public static void main(String[] args) { 
  3.         method(); 
  4.     } 
  5.     /** 
  6.      * 可選參數(shù)方法 
  7.      */ 
  8.     public static void method(String... names) { 
  9.         System.out.println("可選參數(shù)數(shù)量:" + names.length); 
  10.     } 

以上程序的執(zhí)行結(jié)果如下圖所示:

從上述代碼可以看出,可選參數(shù)即使不傳遞任何參數(shù),也就是 0 個(gè)參數(shù),也是能正常調(diào)用到的。

2.一個(gè)方法只能有一個(gè)可選參數(shù)

一個(gè)方法中只能有一個(gè)可選參數(shù),如果有多個(gè)可選參數(shù)程序會(huì)報(bào)錯(cuò),如下圖所示:

3.可選參數(shù)必須要放在方法最后

可選參數(shù)如果不放在方法參數(shù)的最后面,那么編譯器也會(huì)報(bào)錯(cuò),如下圖所示:

4.可選參數(shù)和其他同名方法組成方法重載

可選參數(shù)和其他的同名方法可以并存,并且它們組成了方法重載,如下代碼所示:

優(yōu)先調(diào)用固定參數(shù)還是可選參數(shù)?

基本知識(shí)點(diǎn)介紹完,接下來(lái)咱們回到本文的主題,當(dāng)一個(gè)方法中有兩類(lèi)參數(shù):固定參數(shù)和可選參數(shù)時(shí),究竟是先調(diào)用固定參數(shù)呢?還是先調(diào)用可選參數(shù)呢?接下來(lái)咱們使用一段代碼來(lái)測(cè)試一下:

  1. public class ArgumentExample { 
  2.     public static void main(String[] args) { 
  3.         method("磊哥聊編程"); 
  4.     } 
  5.     /** 
  6.      * 固定參數(shù)方法 
  7.      */ 
  8.     public static void method(String name) { 
  9.         System.out.println("調(diào)用固定參數(shù):" + name); 
  10.     } 
  11.     /** 
  12.      * 可選參數(shù)方法 
  13.      */ 
  14.     public static void method(String... names) { 
  15.         System.out.println("調(diào)用可選參數(shù):" + names.length); 
  16.     } 

以上程序的執(zhí)行結(jié)果如下:

結(jié)論

從上面的結(jié)果可以看出,當(dāng)程序中有固定參數(shù)和可選參數(shù)時(shí),優(yōu)先調(diào)用固定參數(shù),而非可選參數(shù)。

原因分析

看到這,可能有朋友已經(jīng)意識(shí)到了,如果你看過(guò)我上一篇《為什么不同返回類(lèi)型不算方法重載?》就全明白了,究竟是先調(diào)用可選參數(shù)還是固定參數(shù)?上一篇文章在介紹方法重載調(diào)用的優(yōu)先級(jí)規(guī)則里已經(jīng)說(shuō)過(guò)了:其中可選參數(shù)的調(diào)用優(yōu)先級(jí)是最低的,在固定參數(shù)和可選參數(shù)之間還有其他的調(diào)用選項(xiàng)。因?yàn)橛行┡笥褯](méi)注意到,或者沒(méi)看到,所以我這里再簡(jiǎn)單的回顧一下。

第1優(yōu)先級(jí):精準(zhǔn)參數(shù)匹配

方法重載會(huì)優(yōu)先調(diào)用和方法參數(shù)類(lèi)型一模一樣的固定參數(shù)方法。

第2優(yōu)先級(jí):調(diào)用基本類(lèi)型自動(dòng)轉(zhuǎn)換成更大的基本類(lèi)型

如果是基本數(shù)據(jù)類(lèi)型,那么方法重載調(diào)用的第 2 匹配原則是自動(dòng)轉(zhuǎn)換成更大的基本數(shù)據(jù)類(lèi)型,如以下代碼:

  1. public class OverloadExample { 
  2.     public static void main(String[] args) { 
  3.         OverloadExample example = new OverloadExample(); 
  4.         example.method(12); 
  5.     } 
  6.  
  7.     public void method(long num) { 
  8.         System.out.println("調(diào)用 long 方法"); 
  9.     } 
  10.  
  11.     public void method(Integer num) { 
  12.         System.out.println("調(diào)用 Integer 方法"); 
  13.     } 
  14.  
  15.     public void method(Object num) {  
  16.         System.out.println("調(diào)用 Object 方法"); 
  17.     } 
  18.  
  19.     public void method(int... num) { // 可選參數(shù) 
  20.         System.out.println("調(diào)用 int... 方法"); 
  21.     } 

以上程序的執(zhí)行結(jié)果如下圖所示:

第3優(yōu)先級(jí):自動(dòng)裝/拆箱匹配

如果存在基本類(lèi)型對(duì)應(yīng)的包裝類(lèi)型,或者是包裝類(lèi)型對(duì)應(yīng)的基本類(lèi)型的方法重載,那么會(huì)優(yōu)先調(diào)用自動(dòng)裝箱或自動(dòng)拆箱的方法重載,如以下代碼所示:

  1. public class OverloadExample { 
  2.     public static void main(String[] args) { 
  3.         OverloadExample example = new OverloadExample(); 
  4.         example.method(12); 
  5.     } 
  6.  
  7.     public void method(Integer num) { 
  8.         System.out.println("調(diào)用 Integer 方法"); 
  9.     } 
  10.  
  11.     public void method(Object num) { 
  12.         System.out.println("調(diào)用 Object 方法"); 
  13.     } 
  14.  
  15.     public void method(int... num) { // 可選參數(shù) 
  16.         System.out.println("調(diào)用 int... 方法"); 
  17.     } 

以上程序的執(zhí)行結(jié)果如下圖所示:

第4優(yōu)先級(jí):按照繼承路線依次向上匹配父類(lèi)

當(dāng)有父類(lèi)參數(shù)時(shí)會(huì)優(yōu)先調(diào)用父類(lèi)重載方法,如下代碼所示:

  1. public class OverloadExample { 
  2.     public static void main(String[] args) { 
  3.         OverloadExample example = new OverloadExample(); 
  4.         example.method(12); 
  5.     } 
  6.  
  7.     public void method(Object num) { 
  8.         System.out.println("調(diào)用 Object 方法"); 
  9.     } 
  10.  
  11.     public void method(int... num) { // 可選參數(shù) 
  12.         System.out.println("調(diào)用 int... 方法"); 
  13.     } 

以上程序的執(zhí)行結(jié)果如下圖所示:

第5優(yōu)先級(jí):可選參數(shù)匹配

可選參數(shù)的調(diào)用優(yōu)先級(jí)是最低的,當(dāng)一個(gè)類(lèi)中只有可選參數(shù)方法時(shí),才會(huì)調(diào)用可選參數(shù)方法。

總結(jié)

可選參數(shù)是 JDK 5 中新增的以“...”格式存在的參數(shù)類(lèi)型,可選參數(shù)可以匹配 0 到無(wú)窮個(gè)參數(shù),但一個(gè)方法中只能有一個(gè)可選參數(shù),且可選參數(shù)要放在方法參數(shù)的最后面。它可以和固定參數(shù)組成方法重載,但可選參數(shù)的調(diào)用優(yōu)先級(jí)是最低的。

 

責(zé)任編輯:姜華 來(lái)源: Java面試真題解析
相關(guān)推薦

2010-01-19 13:36:16

VB.NET可選參數(shù)

2009-12-17 16:16:24

Rails方法send

2009-10-28 13:23:52

VB.NET可選參數(shù)

2022-02-15 07:03:04

start 源碼run線程

2022-04-18 07:36:37

TimeUnit線程休眠

2010-01-12 11:47:09

VB.NET可選參數(shù)

2022-03-09 07:35:24

線程池線程參數(shù)

2009-03-10 13:51:36

編譯器VS2010C#

2022-01-11 06:53:23

面試重寫(xiě)重載

2024-01-17 06:23:35

SwiftTypeScript定義函數(shù)

2009-08-13 09:47:57

調(diào)用JSP EL表達(dá)式帶參數(shù)方法

2009-05-26 16:12:43

Visual StudC#命名

2010-09-25 13:13:17

tomcatJVM

2022-02-28 07:01:22

線程中斷interrupt

2022-04-11 07:40:45

synchroniz靜態(tài)方法程序

2022-07-11 07:10:48

HTTP協(xié)議類(lèi)型

2022-08-17 07:06:14

SpringBoot配置@Value

2021-10-04 14:56:09

機(jī)器學(xué)習(xí)函數(shù)參數(shù)

2022-05-05 07:38:32

volatilJava并發(fā)

2022-06-06 07:35:26

MySQLInnoDBMyISAM
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美一区二区小视频 | 在线观看成人小视频 | 成人性视频在线 | 美女二区 | 81精品国产乱码久久久久久 | 欧美日韩亚洲一区 | www.亚洲精品 | av天天澡天天爽天天av | 亚洲一区成人 | 欧美乱操 | 久久久久亚洲精品中文字幕 | 亚洲网址 | 亚洲成人a v | 中文字幕精品一区二区三区精品 | 国产成人小视频 | 国产精品爱久久久久久久 | 精品国产不卡一区二区三区 | 99精品99久久久久久宅男 | 国产高清视频在线观看 | 日韩毛片在线免费观看 | 在线看免费的a | 一区中文 | aa级毛片毛片免费观看久 | 99精品在线 | 欧美黄色一级毛片 | 色999视频 | 五月天国产 | 国产精品亚洲综合 | 成人免费视频网站在线看 | 国产精品欧美一区二区三区 | 国产精品一区二区不卡 | 亚洲精品一区二区在线观看 | 日产精品久久久一区二区福利 | 久久久国产一区二区三区 | www日日日 | 久草免费在线视频 | 亚洲欧美日韩激情 | 国产99久久精品一区二区永久免费 | 久久99视频精品 | 日日操夜夜操天天操 | 特黄特色大片免费视频观看 |