最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 的可變參數(shù)方法詳述

 更新時間:2022年02月22日 09:56:51   作者:碼農(nóng)小宋  
這篇文章主要介紹了Java 的可變參數(shù)方法,可變參數(shù)只能作為函數(shù)的最后一個參數(shù),在其前面可以有也可以沒有任何其他參數(shù),由于可變參數(shù)必須是最后一個參數(shù),所以一個函數(shù)最多只能有一個可變參數(shù),下面我們一起進(jìn)入文章了解更多關(guān)于可變參數(shù)的內(nèi)容吧

一、可變參數(shù)方法的定義

首先看下可變參數(shù)方法在代碼上是如何定義的,如下所示:

public static void method1(Integer id, String... names) { ? ?
? System.out.println("id:" + id + " names:" + names.length);
}

通過上面的示例,我們可以看出在定義方法時,在最后一個形參類型后加上三點 …,就表示該形參可以接受多個相同類型的參數(shù)值,多個參數(shù)值被當(dāng)成數(shù)組傳入。

這里我們需要注意幾個點:

  • 可變參數(shù)只能作為函數(shù)的最后一個參數(shù),在其前面可以有也可以沒有任何其他參數(shù);
  • 由于可變參數(shù)必須是最后一個參數(shù),所以一個函數(shù)最多只能有一個可變參數(shù);
  • Java 的可變參數(shù),會被編譯器轉(zhuǎn)型為一個數(shù)組;

上面提到可變參數(shù)的形式會被編譯成一個數(shù)組,那么問題來了,我可不可以寫兩個下面這樣的方法呢?

public static void method1(Integer id, String... names) {?
? System.out.println("id:" + id + " names:"+ names.length);
}
public static void method1(Integer id, String[] names) {?
? System.out.println("id:" + id + " names:" + names.length);
}

在一個類中的定義相同名字的一個可變參數(shù)的方法和一個包含數(shù)組的方法,寫完過后我們就發(fā)現(xiàn) IDEA 已經(jīng)提示我們這種寫法的編譯不了的了。

從這里我們可以知道可變參數(shù)在編譯為字節(jié)碼后,在方法簽名中會以數(shù)組形態(tài)出現(xiàn)的,導(dǎo)致這兩個方法的簽名一致的,如果同時出現(xiàn),是不能編譯通過的。

二、可變參數(shù)方法的調(diào)用

可變參數(shù)方法的調(diào)用跟其他方法的調(diào)用沒什么區(qū)別,這里要說明的是,我們除了通過可變參數(shù)進(jìn)行調(diào)用之外,還可以通過傳入數(shù)組的形式來進(jìn)行調(diào)用,如下所示:

public static void main(String[] args) { ? ? ??
? //直接傳遞參數(shù) ? ? ??
? method1(1, "ziyou", "java極客技術(shù)"); ? ??
? //通過數(shù)組的形式傳遞參數(shù) ? ? ??
? String[] array = new String[]{"ziyou", "Java 極客技術(shù)", "fdf"};?
? method1(2, array); ? ? ?
? //不傳遞可變參數(shù) ? ? ??
? method1(3);
}

通過可變參數(shù)和數(shù)組的形式,這兩種調(diào)用形式本質(zhì)上是一樣的;另外可變參數(shù)的個數(shù)也可以為 0。

三、可變參數(shù)方法的重載

試想一下如果我們定義了下面這樣的兩個方法,定義和使用的時候會是什么情況

public static void method2(String... names) { ??
? System.out.println("111111");
}
public static void method2(String value1, String value2) {
? System.out.println("22222");?
}

第一個是只有一個可變參數(shù)形參的方法;第二個是一個 String 類型的固定參數(shù)和第二個參數(shù)是可變參數(shù)的方法。首先,定義的時候完全沒有問題,IDEA 也沒有任何錯誤提示,編譯也不會有問題。

那么在使用的時候呢?比如下面這樣的寫法會輸出什么結(jié)果呢?

public static void main(String[] args) { ? ? ? ?
? method2("java 極客技術(shù)", "ziyou");
}

在看輸出結(jié)果之前,我們可以看到,main 函數(shù)中的調(diào)用,其實這兩個重載的函數(shù)都是可以滿足的,而且編譯也沒有錯,那么程序運(yùn)行會輸出什么呢?

通過實際的運(yùn)行結(jié)果我們可以看到,輸出的結(jié)果是??22222?? 表示運(yùn)行的是??method2(String value1, String value2)?? 這個方法,那說明什么問題呢?

說明當(dāng)存在與可變參數(shù)方法形成重載方法的時候的,會優(yōu)先固定參數(shù)的方法進(jìn)行執(zhí)行,相信這一點大家應(yīng)該都從來沒有關(guān)注過。

寫到這里可能有小明要問了,那如果我們第二個方法中的 value2 也是可變參數(shù)呢?那這種情況會怎么樣呢?為此我們再看一下,下面的這種形式會怎樣。

public static void method2(String... names) { ? ? ?
? ? ? ? System.out.println("111111");?
? ? }
? ? public static void method2(String value1, String value2) { ??
? ? ? ? System.out.println("22222"); ??
? ? }
? ? public static void method2(String value1, String... value2) {?
? ? ? ? System.out.println("33333"); ? ?
? ? }

首先定義的時候 IDEA 沒有任何錯誤提示,說明編譯是沒有問題的,那調(diào)用的時候呢?

可以看到這個時候 IDEA 已經(jīng)提示我們匹配到多個方法合適的方法,不能編譯通過,主要是第一個和第三個方式的寫法導(dǎo)致的,匹配到了多個可變參數(shù)的方法,我們?nèi)粘i_發(fā)的時候要注意這個問題。

四、Object 可變參數(shù)

看到這樣有小明就要問了,那我可不可以創(chuàng)建一個基于 Object 的可變參數(shù)方法,這樣子這個方法不就是可以接受所有類型的參數(shù)了嗎?就像這樣:

public static void method3(Object... objects) {
? ? ? ? System.out.println("objects size" + objects.length);
}

首先要說的是,這么定義當(dāng)然是沒有問題的,但是可讀性會差很多,調(diào)用方完全不知道要傳入什么類型;要是真的寫了太多像這樣的代碼,估計維護(hù)起來也是害人害己

到此這篇關(guān)于Java 的可變參數(shù)方法詳述的文章就介紹到這了,更多相關(guān)Java 的可變參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot自定義異常視圖過程解析

    springboot自定義異常視圖過程解析

    這篇文章主要介紹了springboot自定義異常視圖過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • Java動態(tài)代理分析及簡單實例

    Java動態(tài)代理分析及簡單實例

    這篇文章主要介紹了 Java動態(tài)代理分析及簡單實例的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • springsecurity實現(xiàn)登錄驗證以及根據(jù)用戶身份跳轉(zhuǎn)不同頁面

    springsecurity實現(xiàn)登錄驗證以及根據(jù)用戶身份跳轉(zhuǎn)不同頁面

    Spring?Security是一種基于Spring框架的安全技術(shù),用于實現(xiàn)身份驗證和訪問控制,本文介紹了如何使用Spring?Security,結(jié)合session和redis來存儲用戶信息,并通過編寫特定的登錄處理類和Web配置,實現(xiàn)用戶登錄和注銷功能
    2024-09-09
  • java泛型學(xué)習(xí)示例

    java泛型學(xué)習(xí)示例

    Java泛型(Generics)是JDK5開始引入的一個新特性,允許在定義類和接口的時候使用類型參數(shù)(Type Parameter)。下面是學(xué)習(xí)泛型的示例
    2014-04-04
  • java調(diào)用opencv身份證號識別詳解

    java調(diào)用opencv身份證號識別詳解

    這篇文章主要為大家詳細(xì)介紹了java如何調(diào)用opencv實現(xiàn)身份證號的識別,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • 利用Intellij Idea連接遠(yuǎn)程服務(wù)器實現(xiàn)遠(yuǎn)程上傳部署功能

    利用Intellij Idea連接遠(yuǎn)程服務(wù)器實現(xiàn)遠(yuǎn)程上傳部署功能

    大家在使用Intellij Idea開發(fā)程序的時候,是不是需要部署到遠(yuǎn)程SSH服務(wù)器運(yùn)行呢,當(dāng)然也可以直接在idea軟件內(nèi)容實現(xiàn)配置部署操作,接下來通過本文給大家分享利用Intellij Idea連接遠(yuǎn)程服務(wù)器實現(xiàn)遠(yuǎn)程上傳部署功能,感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • SpringBoot項目Docker部署三種方式

    SpringBoot項目Docker部署三種方式

    本文主要介紹了SpringBoot項目Docker部署三種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • java實現(xiàn)字符串排列組合問題

    java實現(xiàn)字符串排列組合問題

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)字符串排列組合問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Java基于裝飾者模式實現(xiàn)的圖片工具類實例【附demo源碼下載】

    Java基于裝飾者模式實現(xiàn)的圖片工具類實例【附demo源碼下載】

    這篇文章主要介紹了Java基于裝飾者模式實現(xiàn)的圖片工具類,結(jié)合完整實例形式分析了裝飾者模式實現(xiàn)圖片的判斷、水印、縮放、復(fù)制等功能,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下
    2017-09-09
  • Maven+Tomcat8 實現(xiàn)自動化部署的方法

    Maven+Tomcat8 實現(xiàn)自動化部署的方法

    本篇文章主要介紹了Maven+Tomcat8 實現(xiàn)自動化部署的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10

最新評論

内乡县| 玛沁县| 潜山县| 兴宁市| 凤阳县| 山阴县| 聂拉木县| 中宁县| 西贡区| 泸西县| 治县。| 乌拉特前旗| 遂昌县| 阳原县| 涟源市| 额敏县| 石泉县| 柘城县| 绿春县| 故城县| 南漳县| 盈江县| 泽库县| 逊克县| 微山县| 汶上县| 团风县| 白河县| 宁国市| 彭山县| 亳州市| 邯郸县| 阿图什市| 泰州市| 霍州市| 彰武县| 建宁县| 义马市| 宜章县| 色达县| 惠州市|