溫馨提示×

溫馨提示×

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

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

java 中數組初始化實例詳解

發(fā)布時間:2020-08-24 08:40:06 來源:腳本之家 閱讀:133 作者:非水非云 欄目:編程語言

1.數組初始化

定義數組的方式:

  int[] arr1; 或  int arr1[];

數組初始化

  通過上邊的定義,我們只是得到了一個數組的引用。這時已經為引用分配了存儲空間,但是還沒有給數組對象本身分配任何空間。想要給數組對象分配存儲空間,必須使用初始化表達式。

a.在數組創(chuàng)建的地方進行初始化,如:

int[] arr1 = {1,2,3,4,5};

  這種方式等價于使用new來進行存儲空間分配。

b.給數組的引用賦值,如:

int[] arr1 = {1,2,3,4,5};
int[] arr2;
arr2 = arr1;

  復制的只是一個引用。如下圖:

java 中數組初始化實例詳解

  所有的數組都有一個固定成員length,通過它可以知道數組元素的個數。

 c.當不確定數組元素的個數時的數組創(chuàng)建

  當數組元素個數不確定時,我們可以直接使用new在數組里創(chuàng)建元素。注意new可以應用于基本類型的數組,但是不能應用于單個的基本類型。

java 中數組初始化實例詳解

d.在定義數組的同時也可以進行初始化,當創(chuàng)建一個非基本類型的數組時,實際上創(chuàng)建的是引用數組。

 可以用花括號列表的形式來初始化對象數組,有兩種形式:

java 中數組初始化實例詳解

 2.可變參數列表

下圖標出了參數列表的使用方式、格式和對傳入參數的要求。

2.1 列表參數類型可以不同的情況

可變參數類型為Object,因為所有的類都直接或間接的繼承自Object類,可以向上轉型為Object,因此參數列表中的類型可以不一致。

java 中數組初始化實例詳解

輸出如下圖:

java 中數組初始化實例詳解

2.2 列表參數類型必須相同的情況

  當然可變參數參數列表也可以作為函數的一個參數傳入,如下圖。這里的參數列表中的參數類型為string,則所有的參數必須是string類型,與上面的程序不同。

java 中數組初始化實例詳解

java 中數組初始化實例詳解

 2.3 可變參數列表中的參數可以是任何類型,包括基本類型

下面是可變參數列表為數組的例子:

java 中數組初始化實例詳解

java 中數組初始化實例詳解

從輸出結果的最后兩行可知,可變參數列表實際使用的是基本類型,不依賴自動包裝機制。

2.4 可變參數列表和自動包裝機制

但是,我們要知道,可變參數列表和自動包裝機制可以“共處”,如下圖:

java 中數組初始化實例詳解

2.5 可變參數列表與函數重載 

可變參數列表使重載過程變得復雜:

java 中數組初始化實例詳解

在上面的所有帶參數的函數調用,編譯器都會使用自動包裝機制來匹配重載的方法,然后調用最匹配的方法。但是不使用使用參數來f()時,編譯器會二義性錯誤:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
  The method f(Character[]) is ambiguous for the type OverloadingVarargs

  at thingjinjava.OverloadingVarargs.main(OverloadingVarargs.java:25)

那么,如何解決這個問題呢?

可以嘗試著在某個方法中增加一個非可變參數來解決該問題。

java 中數組初始化實例詳解

可是,程序仍然無法通過編譯,還是報上面同樣的錯誤。

但是,當我們在給這兩個函數都添加一個非可變參數,問題就可以解決了。

java 中數組初始化實例詳解

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

向AI問一下細節(jié)

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

AI