三階段模型
// 階段 1:聲明 — 僅創建引用變量,不分配內存
int[] intArray0;
int intArray1[]; // 不推薦:類型可讀性差
// 階段 2:創建 — 分配堆內存,賦默認值
intArray0 = new int[3]; // 指定長度
intArray1 = new int[]{0, 1, 2}; // 同時初始化
// 階段 3:初始化 — 顯式賦予業務值(可合併在創建階段)
int[] arr = new int[]{10, 20, 30}; // 聲明+創建+初始化一步到位
聲明語法規範
| 類型 | 推薦寫法 | 不推薦寫法 | 說明 |
| 基本類型 | int[] arr | int arr[] | 類型在前,語義清晰 |
| 引用類型 | String[] arr | String arr[] | 同理 |
| 錯誤示範 | int[5] arr | 聲明不能指定長度 |
創建與默認值驗證
public class DefaultValueTest {
public static void main(String[] args) {
int[] intArr = new int[3];
float[] floatArr = new float[3];
boolean[] boolArr = new boolean[3];
char[] charArr = new char[3];
String[] strArr = new String[3];
System.out.println("int: " + intArr[0]); // 0
System.out.println("float: " + floatArr[0]); // 0.0
System.out.println("boolean: " + boolArr[0]); // false
System.out.println("char: " + (int)charArr[0]); // 0 (\u0000)
System.out.println("String: " + strArr[0]); // null
}
}
初始化分類詳解
靜態初始化 — 程序員指定值,系統定長度
// 完整語法
int[] arr1 = new int[]{10, 20, 30};
// 簡化語法(僅限聲明語句)
int[] arr2 = {10, 20, 30};
// 多維數組
int[][] matrix = {{1,2}, {3,4}, {5,6}};
動態初始化 — 指定長度,系統賦默認值
int[] arr = new int[5]; // {0,0,0,0,0}
String[] names = new String[3]; // {null,null,null}
關鍵規則總結
- 聲明不指定長度:中括號內不能有數字
- new 即分配內存即有默認值:不可能只分配不賦值
- 基本類型包裝類數組默認 null:屬於引用類型數組
- 靜態初始化不可指定長度:
new int[3]{1,2,3} ❌
- 動態初始化必須指定長度:
new int[] ❌
- 不可混用:不能同時指定長度又指定每個元素值
完整可運行代碼
package javabase;
public class CreateArray {
public static void main(String[] args) {
// 聲明
int[] intArray0; int intArray1[];
float[] floatArray0; float floatArray1[];
boolean[] boolArray0; boolean boolArray1[];
char[] charArray0; char charArray1[];
String[] stringArray0; String stringArray1[];
// 創建
intArray0 = new int[3];
intArray1 = new int[]{0, 1, 2};
// 驗證默認值
System.out.println("intArray0[0]=" + intArray0[0]);
floatArray0 = new float[3];
System.out.println("floatArray0[0]=" + floatArray0[0]);
boolArray0 = new boolean[3];
System.out.println("boolArray0[0]=" + boolArray0[0]);
charArray0 = new char[3];
System.out.println("charArray0[0]=" + (int)charArray0[0]);
stringArray0 = new String[3];
System.out.println("stringArray0[0]=" + stringArray0[0]);
// 初始化
int[] intArray2 = new int[]{20, 21, 22};
int[] intArray3 = {30, 31, 32};
int[] intArray4 = new int[3];
System.out.println("intArray2[0]=" + intArray2[0]);
System.out.println("intArray3[0]=" + intArray3[0]);
System.out.println("intArray4[0]=" + intArray4[0]);
}
}
動態初始化默認值規則表
| 元素類型 | 默認值 |
| byte/short/int/long | 0 |
| float/double | 0.0 |
| char | '\u0000' |
| boolean | false |
| 引用類型(類/接口/數組) | null |
總結
記住核心口訣:聲明不分內存,創建分內存且有默認值,初始化賦業務值。三階段可合併,語法規則要記清。數組是引用類型,掌握內存分配機制是避免 NPE 與邏輯錯誤的關鍵。