在Java中,數組必須先初始化,然后才可以使用。所謂的初始化,就是為數組中的數組元素分配內存空間,并為每個數組元素賦初始值。
Java的數組初始化有兩種基本方式:動態初始化與靜態初始化。我們在初始化數組時,不要靜態初始化和動態初始化同時使用。也就是說,不要在進行數組初始化時,既指定數組的長度,又為每個數組元素分配初始值。接下來壹哥分別利用這兩種方式,給大家講解數組的創建和初始化。
動態初始化
動態初始化,是指程序員只指定數組長度,由系統為數組元素分配初始值。
1.1 基本語法
數組在進行動態初始化時有兩種寫法,大家可以根據自己的編程習慣進行選擇,沒有孰優孰劣。
●寫法1: 數據類型[] 數組名 = new 數據類型[長度];
●寫法2: 數據類型 數組名[] = new 數據類型[長度];
1.2 案例代碼
public class Demo01 {
public static void main(String[] args) {
//數組的動態初始化
//寫法1: new用于創建一個對象
int[] arr = new int[3];
//寫法2
//int arr[] = new int[3];
//存儲數據
arr[0] = 11;
arr[1] = 22;
arr[2] = 33;
//取數據,數組的下標從0開始
System.out.println("第一個元素為:"+arr[0]);
System.out.println("第二個元素為:"+arr[1]);
System.out.println("第三個元素為:"+arr[2]);
//獲取數據的長度
System.out.println("數組長度="+arr.length);
//錯誤:數組下標越界
//System.out.println(arr[3]);
}
}
在上述代碼中,new是Java中的關鍵字,用來創建對象,我們以后會詳細學習。
其中new int[3];中的3,表示這個數組的初始長度是3,只能存放3個數據。我們在聲明時在方括號中直接輸入數組的長度,這種方式就叫做動態初始化。數組的長度一旦確定后,就不會再發生改變。內部的數據元素可以通過索引進行添加,arr[]數組中的數字就叫做索引。
另外大家還注意,在Java中數組的下標是從0開始的。所以在一個長度為3的數組中,最后一個元素的下標為2,則取值時的格式是arr[2],而不應該是arr[3]。否則會產生數組下標越界異常”ArrayIndexOutOfBoundsException:: Index 3 out of bounds for length 3“,如下圖所示:

靜態初始化
靜態初始化,就是由程序員指定每個數組元素的初始值,由系統計算出數組的長度。
2.1 基本語法
數組在進行靜態初始化時有三種寫法,大家可以根據自己的編程習慣進行選擇,同樣沒有孰優孰劣。簡寫的靜態初始化,只能在一條語句完成,不能分割成兩條語句。
●寫法1:數據類型[] 數組名 = {數據1,數據2,...};
●寫法2:數據類型 數組名[] = {數據1,數據2,...};
●寫法3:數據類型[] 數組名 = new 數據類型[]{數據1,數據2,...};
2.2 案例代碼
public class Demo02 {
public static void main(String[] args) {
//數組的靜態初始化
//寫法1
//引用類型的數組。聲明數組后直接添加一個花括號{},并在花括號中添加數據,就是靜態初始化
String[] names = {"張三","李四","王五","一一哥"};
//寫法2:
//String names[] = {"張三","李四","王五","一一哥"};
//寫法3:
//String names[] = new String[]{"張三","李四","王五","一一哥"};
// [Ljava.lang.String;@15db9742 內存地址
// System.out.println(names);
//操作數組
//存數據,新數據存入到原有的位置
names[0] = "yyg";
names[1] = "尼古拉斯";
//取數據
System.out.println("第二個元素:"+names[1]);
System.out.println("第四個元素:"+names[3]);
//獲取數組的長度
System.out.println("數組的長度:"+names.length);
}
}
在上述代碼中,在聲明完數組后,直接添加一個花括號{},并在花括號中添加數據,這種方式就叫做靜態初始化。
對于初始化問題,有這樣的一個問題哈!大家可以看看:
java中為什么數組靜態初始化可以省略new而動態初始化不行?
其實在Java中,數組的初始化有兩種方式:靜態初始化和動態初始化。
靜態初始化是指在定義數組的同時為數組元素指定初始值,可以省略new操作符。例如:
int[] arr1 = {1, 2, 3};
動態初始化是指在定義數組后,通過new操作符為數組元素分配空間,并指定初始值。例如:
int[] arr2 = new int[3];
arr2[0] = 1;
arr2[1] = 2;
arr2[2] = 3;
數組靜態初始化可以省略new操作符的原因是編譯器可以根據初始化的元素數量自動確定數組的長度,并分配相應的內存空間。而動態初始化必須顯式指定數組長度,因為編譯器無法根據賦值語句推斷數組的長度。
因此,對于動態初始化,必須先使用new操作符為數組分配內存空間,然后再為數組元素賦值。現在大家明白了嗎?