91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java的可變參數方法怎么用

發布時間:2022-02-22 10:48:39 來源:億速云 閱讀:139 作者:iii 欄目:開發技術

今天小編給大家分享一下Java的可變參數方法怎么用的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

一、可變參數方法的定義

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

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

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

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

  • 可變參數只能作為函數的最后一個參數,在其前面可以有也可以沒有任何其他參數;

  • 由于可變參數必須是最后一個參數,所以一個函數最多只能有一個可變參數;

  • Java 的可變參數,會被編譯器轉型為一個數組;

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

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

在一個類中的定義相同名字的一個可變參數的方法和一個包含數組的方法,寫完過后我們就發現 IDEA 已經提示我們這種寫法的編譯不了的了。

Java的可變參數方法怎么用

從這里我們可以知道可變參數在編譯為字節碼后,在方法簽名中會以數組形態出現的,導致這兩個方法的簽名一致的,如果同時出現,是不能編譯通過的。

二、可變參數方法的調用

可變參數方法的調用跟其他方法的調用沒什么區別,這里要說明的是,我們除了通過可變參數進行調用之外,還可以通過傳入數組的形式來進行調用,如下所示:

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

通過可變參數和數組的形式,這兩種調用形式本質上是一樣的;另外可變參數的個數也可以為 0。

三、可變參數方法的重載

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

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

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

Java的可變參數方法怎么用

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

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

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

Java的可變參數方法怎么用

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

說明當存在與可變參數方法形成重載方法的時候的,會優先固定參數的方法進行執行,相信這一點大家應該都從來沒有關注過。

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

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 沒有任何錯誤提示,說明編譯是沒有問題的,那調用的時候呢?

Java的可變參數方法怎么用

可以看到這個時候 IDEA 已經提示我們匹配到多個方法合適的方法,不能編譯通過,主要是第一個和第三個方式的寫法導致的,匹配到了多個可變參數的方法,我們日常開發的時候要注意這個問題。

四、Object 可變參數

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

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

以上就是“Java的可變參數方法怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

营口市| 偏关县| 托克托县| 凤山县| 富顺县| 昌都县| 吴川市| 丹东市| 黄陵县| 德化县| 布尔津县| 宕昌县| 华阴市| 邵阳县| 台湾省| 海安县| 肃宁县| 江西省| 湘潭县| 扎囊县| 兰州市| 奈曼旗| 曲沃县| 汽车| 宁强县| 上思县| 开封县| 常山县| 临江市| 江口县| 和平县| 化德县| 潼南县| 杨浦区| 噶尔县| 永丰县| 无极县| 南安市| 墨脱县| 大同市| 扶绥县|