Java 数组的初始化主要分为两大类:

- 静态初始化:在创建数组时,就明确指定数组的内容。
- 动态初始化:在创建数组时,只指定数组的长度,然后由程序后续为每个元素赋值。
静态初始化
静态初始化是指在定义数组的同时,为数组的每个元素分配内存空间并赋值,这种方式简单直观,适用于元素已知且数量较少的情况。
语法格式
有两种常见的静态初始化语法:
推荐使用(类型推断)
// 数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, 元素3, ...};
int[] numbers = new int[]{1, 2, 3, 4, 5};
注意:在这种格式中,new int[] 中的 [] 必须包含,它表示你要创建的是一个数组。

简写形式(最常用)
// 数据类型[] 数组名 = {元素1, 元素2, 元素3, ...};
String[] names = {"Alice", "Bob", "Charlie"};
double[] prices = {19.99, 29.50, 10.00};
这种简写方式非常流行,因为它更简洁,Java 编译器会自动处理 new 数组的部分。
示例代码
public class StaticInitialization {
public static void main(String[] args) {
// 格式一
int[] scores = new int[]{100, 85, 92, 78};
System.out.println("第一个学生的分数: " + scores[0]); // 输出: 100
// 格式二(推荐)
String[] cities = {"北京", "上海", "广州", "深圳"};
System.out.println("第一个城市: " + cities[0]); // 输出: 北京
// 遍历数组
System.out.println("所有城市:");
for (String city : cities) {
System.out.println(city);
}
}
}
动态初始化
动态初始化是指先为数组分配指定长度的内存空间,此时数组中的每个元素都会被赋予一个默认值,之后,我们再通过索引(下标)为每个元素赋值。
语法格式
// 数据类型[] 数组名 = new 数据类型[数组长度];
关键点:

数组长度:必须是整数,指定了数组可以存储多少个元素。- 默认值:在动态初始化后,数组元素会被自动赋予默认值:
- 整数类型 (byte, short, int, long):
0 - 浮点类型 (float, double):
0 - 字符类型 (char):
'\u0000'(空字符) - 布尔类型 (boolean):
false - 引用类型 (如 String, 对象):
null
- 整数类型 (byte, short, int, long):
示例代码
public class DynamicInitialization {
public static void main(String[] args) {
// 创建一个长度为 5 的 int 类型数组
int[] grades = new int[5];
// 查看初始化后的默认值
System.out.println("初始化后的数组元素:");
for (int i = 0; i < grades.length; i++) {
System.out.println("grades[" + i + "] = " + grades[i]);
}
// 输出:
// grades[0] = 0
// grades[1] = 0
// grades[2] = 0
// grades[3] = 0
// grades[4] = 0
// 通过索引为元素赋值
grades[0] = 95;
grades[1] = 88;
grades[2] = 76;
grades[3] = 100;
grades[4] = 89;
System.out.println("\n赋值后的数组元素:");
for (int grade : grades) {
System.out.println(grade);
}
// 输出:
// 95
// 88
// 76
// 100
// 89
}
}
多维数组初始化
多维数组可以看作是“数组的数组”,最常见的二维数组初始化方式如下。
静态初始化
// 方式一
int[][] matrix1 = new int[][]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
// 方式二(简写)
int[][] matrix2 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
动态初始化
// 创建一个 3x4 的二维数组(3行4列) int[][] table = new int[3][4]; // 创建一个不规则的二维数组(行数固定,每行的列数不同) int[][] jaggedArray = new int[3][]; jaggedArray[0] = new int[2]; // 第一行有2个元素 jaggedArray[1] = new int[4]; // 第二行有4个元素 jaggedArray[2] = new int[3]; // 第三行有3个元素
Arrays.toString() 的使用
直接打印数组变量(如 System.out.println(numbers);)会得到类似 [I@15db9742 的输出,这是数组的内存地址,没有实际意义,为了方便地查看数组内容,Java 提供了 java.util.Arrays 工具类。
import java.util.Arrays;
public class ArrayToStringExample {
public static void main(String[] args) {
int[] numbers = {10, 20, 30, 40, 50};
// 使用 Arrays.toString() 将数组转换为易读的字符串
System.out.println(Arrays.toString(numbers));
// 输出: [10, 20, 30, 40, 50]
}
}
对于二维数组,可以使用 Arrays.deepToString()。
import java.util.Arrays;
public class ArrayDeepToStringExample {
public static void main(String[] args) {
int[][] matrix = {{1, 2}, {3, 4}};
System.out.println(Arrays.deepToString(matrix));
// 输出: [[1, 2], [3, 4]]
}
}
总结与最佳实践
| 特性 | 静态初始化 | 动态初始化 |
|---|---|---|
| 定义 | 创建时指定所有元素 | 创建时指定长度,后续赋值 |
| 语法 | int[] a = {1, 2, 3}; 或 int[] a = new int[]{1, 2, 3}; |
int[] a = new int[3]; |
| 适用场景 | 元素已知且数量少 | 元素数量已知但值未知,或值由程序逻辑计算得出 |
| 默认值 | 无(直接赋值) | 有(int为0, String为null等) |
最佳实践建议:
- 优先使用静态初始化:如果你在写代码时就已经知道数组里要放什么,直接使用简写的静态初始化 ,代码更清晰。
- 使用动态初始化:如果数组的元素需要通过循环、计算或从文件/数据库中读取才能确定,那么就应该使用动态初始化。
- 牢记默认值:在使用动态初始化时,要清楚不同数据类型的默认值,避免因忘记初始化而导致的
NullPointerException或逻辑错误(以为int数组元素是0但实际没有赋值)。 - 使用
Arrays.toString():在调试或打印数组内容时,养成使用Arrays.toString()的好习惯。
