java多维数组本质是“数组的数组”,动态分配需先指定第一维长度,规则数组用new int4,不规则数组需逐行分配;遍历须用arr[i].length而非arr[0].length并判空。

Java 中多维数组本质是“数组的数组”,动态分配和遍历必须紧扣这一结构,尤其要区分规则与不规则情形,避免空指针和越界。
二维数组的动态分配方式
动态分配指运行时确定尺寸,不依赖编译期字面量。关键原则:第一维长度必须指定,第二维可延迟分配。
-
规则二维数组(每行等长):直接指定行列数,所有元素初始化为默认值(如
int为 0)int[][] matrix = new int[4][5];→ 创建 4 行 × 5 列的矩形结构 -
不规则二维数组(每行长度不同):先声明行数,再逐行为每行单独分配列长
int[][] jagged = new int[3][];jagged[0] = new int[2];jagged[1] = new int[4];jagged[2] = new int[1]; -
注意语法禁区:
new int[][4]编译失败——第二维长度不能脱离第一维独立指定
安全遍历的核心写法
无论规则或不规则,遍历都必须基于实际长度判断,且提前检查 null。推荐两种通用方式:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
传统 for 循环(带索引,适合需坐标逻辑):
外层用arr.length控制行数,内层用arr[i].length控制当前行列数for (int i = 0; i <br> <code>if (arr[i] == null) continue;
for (int j = 0; j <br> <code>System.out.print(arr[i][j] + " ");
}} -
增强 for 循环(简洁,适合只读处理):
外层得到每行引用(类型为int[]),内层遍历该行元素for (int[] row : arr) {
if (row != null) {
for (int val : row) {
System.out.print(val + " ");
}
}}
三维及以上数组的处理要点
原理一致,只是嵌套加深。以三维为例:
-
动态分配:
int[][][] cube = new int[2][3][4];→ 分配 2 个二维面,每个面 3 行 × 4 列 -
遍历结构:三层循环,每层用对应层级的
.lengthfor (int i = 0; i <br> <code>for (int j = 0; j <br> <code>for (int k = 0; k <br> <code>System.out.print(cube[i][j][k] + " "); -
空值防护不可省略:任意一层(如
cube[i]或cube[i][j])都可能为null,访问前必须判空
实用提醒
常见陷阱比想象中更易触发:
-
matrix.length是行数,不是总元素个数;总元素需累加各matrix[i].length - 误用
matrix[0].length代替matrix[i].length—— 在不规则数组中会导致越界或漏数据 - 把
int[][]当作“矩阵”操作,忽略其本质是引用数组,导致对未分配行调用.length抛出NullPointerException - 需要深度遍历(维度不确定或混合嵌套)时,递归比硬编码循环更健壮,但需统一终止条件(如到达
int[]层)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










