欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2022年02月22日 09:56:51   作者:碼農(nóng)小宋  
這篇文章主要介紹了Java 的可變參數(shù)方法,可變參數(shù)只能作為函數(shù)的最后一個(gè)參數(shù),在其前面可以有也可以沒(méi)有任何其他參數(shù),由于可變參數(shù)必須是最后一個(gè)參數(shù),所以一個(gè)函數(shù)最多只能有一個(gè)可變參數(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);
}

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

這里我們需要注意幾個(gè)點(diǎn):

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

上面提到可變參數(shù)的形式會(huì)被編譯成一個(gè)數(shù)組,那么問(wèn)題來(lái)了,我可不可以寫(xiě)兩個(gè)下面這樣的方法呢?

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);
}

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

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

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

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

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

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

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

試想一下如果我們定義了下面這樣的兩個(gè)方法,定義和使用的時(shí)候會(huì)是什么情況

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

第一個(gè)是只有一個(gè)可變參數(shù)形參的方法;第二個(gè)是一個(gè) String 類(lèi)型的固定參數(shù)和第二個(gè)參數(shù)是可變參數(shù)的方法。首先,定義的時(shí)候完全沒(méi)有問(wèn)題,IDEA 也沒(méi)有任何錯(cuò)誤提示,編譯也不會(huì)有問(wèn)題。

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

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

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

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

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

寫(xiě)到這里可能有小明要問(wèn)了,那如果我們第二個(gè)方法中的 value2 也是可變參數(shù)呢?那這種情況會(huì)怎么樣呢?為此我們?cè)倏匆幌拢旅娴倪@種形式會(huì)怎樣。

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"); ? ?
? ? }

首先定義的時(shí)候 IDEA 沒(méi)有任何錯(cuò)誤提示,說(shuō)明編譯是沒(méi)有問(wèn)題的,那調(diào)用的時(shí)候呢?

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

四、Object 可變參數(shù)

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

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

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

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

相關(guān)文章

  • Java實(shí)現(xiàn)添加條碼或二維碼到Word文檔

    Java實(shí)現(xiàn)添加條碼或二維碼到Word文檔

    這篇文章主要介紹了如何在Word文檔中添加條碼、二維碼??稍谖臋n正文段落中添加,也可在頁(yè)眉頁(yè)腳中添加,感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下吧
    2022-05-05
  • Spring?Security實(shí)現(xiàn)統(tǒng)一登錄與權(quán)限控制的示例代碼

    Spring?Security實(shí)現(xiàn)統(tǒng)一登錄與權(quán)限控制的示例代碼

    這篇文章主要介紹了Spring?Security實(shí)現(xiàn)統(tǒng)一登錄與權(quán)限控制,本文通過(guò)示例代碼重點(diǎn)看一下統(tǒng)一認(rèn)證中心和業(yè)務(wù)網(wǎng)關(guān)的建設(shè),需要的朋友可以參考下
    2022-03-03
  • 理解Java當(dāng)中的回調(diào)機(jī)制(翻譯)

    理解Java當(dāng)中的回調(diào)機(jī)制(翻譯)

    今天我要和大家分享一些東西,舉例來(lái)說(shuō)這個(gè)在JavaScript中用的很多。我要講講回調(diào)(callbacks)。你知道什么時(shí)候用,怎么用這個(gè)嗎?你真的理解了它在java環(huán)境中的用法了嗎?當(dāng)我也問(wèn)我自己這些問(wèn)題,這也是我開(kāi)始研究這些的原因
    2014-10-10
  • Java中Static關(guān)鍵字的五種用法詳解

    Java中Static關(guān)鍵字的五種用法詳解

    這篇文章主要介紹了Java中static的五種用法:修飾成員變量,修飾成員方法,修飾內(nèi)部類(lèi),靜態(tài)代碼塊,靜態(tài)導(dǎo)包,想詳細(xì)了解的小伙伴可以參考閱讀本文
    2023-03-03
  • 用java代碼幫朋友P圖

    用java代碼幫朋友P圖

    這篇文章主要為大家介紹了使用java代碼幫朋友P圖的實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 詳解Spring Cloud Finchley版中Consul多實(shí)例注冊(cè)的問(wèn)題處理

    詳解Spring Cloud Finchley版中Consul多實(shí)例注冊(cè)的問(wèn)題處理

    這篇文章主要介紹了詳解Spring Cloud Finchley版中Consul多實(shí)例注冊(cè)的問(wèn)題處理,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • 聊聊@RequestBody和Json之間的關(guān)系

    聊聊@RequestBody和Json之間的關(guān)系

    這篇文章主要介紹了@RequestBody和Json之間的關(guān)系,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java 設(shè)計(jì)模式原則之迪米特法則詳解

    Java 設(shè)計(jì)模式原則之迪米特法則詳解

    這篇文章主要介紹了Java 設(shè)計(jì)模式原則之迪米特法則詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • java String.split 無(wú)法使用小數(shù)點(diǎn)分割的問(wèn)題

    java String.split 無(wú)法使用小數(shù)點(diǎn)分割的問(wèn)題

    這篇文章主要介紹了java String.split 無(wú)法使用小數(shù)點(diǎn)分割的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 教你快速學(xué)會(huì)JPA中所有findBy語(yǔ)法規(guī)則

    教你快速學(xué)會(huì)JPA中所有findBy語(yǔ)法規(guī)則

    這篇文章主要介紹了教你快速學(xué)會(huì)JPA中所有findBy語(yǔ)法規(guī)則,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評(píng)論