Java中二维数组的定义与初始化
在Java中,二维数组本质上是一个“数组的数组”,即每个元素本身也是一个数组,与一维数组不同,二维数组可以表示矩阵、表格等具有行和列结构的数据,掌握二维数组的定义、初始化和操作是Java编程的基础技能之一。

二维数组的声明
二维数组的声明与一维数组类似,只需在数据类型后增加一对方括号[][],声明语法如下:
数据类型[][] 数组名;
声明一个整型二维数组matrix:
int[][] matrix;
仅创建了数组引用,并未分配内存空间,若需使用数组,还需进行初始化。
二维数组的初始化
二维数组的初始化分为静态初始化和动态初始化两种方式。
1 静态初始化
静态初始化在声明数组时直接为其分配内存并赋值,语法如下:
数据类型[][] 数组名 = new 数据类型[][]{{值1, 值2, ...}, {值3, 值4, ...}, ...};
创建一个3×3的矩阵并初始化:
int[][] matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
matrix包含3行3列,matrix[0][0]的值为1,matrix[1][2]的值为6,以此类推。
2 动态初始化
动态初始化先声明数组,再通过new关键字分配内存并指定行数和列数,语法如下:

数据类型[][] 数组名 = new 数据类型[行数][列数];
创建一个2×4的整型数组:
int[][] matrix = new int[2][4];
matrix包含2行4列,所有元素默认初始化为0(整型),若需赋值,可通过索引逐个操作:
matrix[0][0] = 10; matrix[1][3] = 20;
不规则二维数组
Java允许二维数组的每行长度不同,即“不规则数组”,创建时需先指定行数,再为每行单独分配列数。
int[][] irregularArray = new int[3][]; irregularArray[0] = new int[2]; // 第一行2列 irregularArray[1] = new int[4]; // 第二行4列 irregularArray[2] = new int[3]; // 第三行3列
二维数组的遍历
遍历二维数组通常使用嵌套循环,外层循环遍历行,内层循环遍历列。
1 使用for循环
int[][] matrix = {{1, 2}, {3, 4}, {5, 6}};
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
输出结果:
1 2
3 4
5 6
2 使用增强for循环
增强for循环(for-each)可简化代码,适用于仅需读取元素的场景:
for (int[] row : matrix) {
for (int element : row) {
System.out.print(element + " ");
}
System.out.println();
}
二维数组的常见操作
1 获取数组长度
array.length:返回二维数组的行数。array[i].length:返回第i行的列数。
int[][] matrix = {{1, 2, 3}, {4, 5}};
System.out.println("行数: " + matrix.length); // 输出2
System.out.println("第1行列数: " + matrix[0].length); // 输出3
System.out.println("第2行列数: " + matrix[1].length); // 输出2
2 修改数组元素
通过索引可直接修改元素值:
matrix[0][1] = 10; // 将第一行第二列的值改为10
3 查找元素
通过遍历数组可查找特定元素:

int target = 5;
boolean found = false;
for (int[] row : matrix) {
for (int element : row) {
if (element == target) {
found = true;
break;
}
}
}
System.out.println("元素是否存在: " + found);
二维数组的内存模型
理解二维数组的内存结构有助于更好地操作数组。
int[][] matrix = new int[3][4];
在内存中,matrix是一个引用数组,每个元素指向一个一维数组,二维数组的行长度可以不同(不规则数组)。
二维数组的应用场景
二维数组广泛应用于以下场景:
- 矩阵运算:如矩阵加法、乘法等。
- 表格数据存储:如Excel表格、数据库结果集等。
- 图像处理:像素矩阵的表示与操作。
- 游戏开发:地图网格、棋盘状态等。
注意事项
- 索引越界:访问不存在的行或列会抛出
ArrayIndexOutOfBoundsException。matrix[3][0]在3行数组中会导致越界。 - 空指针异常:若未初始化数组直接使用,会抛出
NullPointerException。int[][] matrix; System.out.println(matrix[0][0]); // 抛出异常
- 不规则数组:操作不规则数组时需注意每行的长度,避免越界。
示例:矩阵转置
矩阵转置是二维数组的经典操作,即行列互换,代码实现如下:
int[][] matrix = {{1, 2, 3}, {4, 5, 6}};
int[][] transpose = new int[matrix[0].length][matrix.length];
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
transpose[j][i] = matrix[i][j];
}
}
// 输出转置后的矩阵
for (int[] row : transpose) {
for (int element : row) {
System.out.print(element + " ");
}
System.out.println();
}
输出结果:
1 4
2 5
3 6
二维数组是Java中处理结构化数据的重要工具,通过掌握其声明、初始化、遍历和操作方法,可以高效解决矩阵、表格等问题,在实际开发中,需注意索引越界和空指针异常等常见问题,确保代码的健壮性。


















