java多维数组是“数组的数组”,非连续内存;初始化需层级匹配、类型一致,支持不规则二维但须每行声明为int[];三维须严格三层嵌套;声明初始化须一步到位,不能拆分赋值;动态创建需逐层new并判空。

Java 多维数组不是“一块连续内存”,而是“数组的数组”。初始化时必须明确每一层的结构,否则编译失败或运行时报空指针。关键不在层数多,而在层级匹配和类型一致。
二维数组:支持不规则,但每行必须是 int[]
声明 int[][] 后,大括号第一层代表“行数”,每个内层大括号是一整行,必须全是 int 元素,且不能混类型或错嵌套:
-
合法:
int[][] a = {{1, 2}, {3, 4, 5}, {6}};→ 3 行,长度分别为 2、3、1 -
合法(含 null):
int[][] b = {{1}, null, {2, 3}};→ 第二行未初始化,访问前需判空 -
非法:
int[][] c = {{1, 2}, {3, "a"}};→ 字符串不能放进int[] -
非法:
int[][] d = {{1, 2}, {3, 4, {5}}};→{5}是int[],不能当int放在第二层里
三维数组:严格三层嵌套,缺一不可
int[][][] 要求最外层对应“块”,中间层对应“行”,最内层才是“列元素”。每一级都必须是对应维度的数组类型:
-
合法:
int[][][] x = {{{1, 2}}, {{3}, {4, 5, 6}}};→ 第一维长 2;第二维长度分别是 1 和 2;所有最内层都是int[] -
非法:
int[][][] y = {{{1}}, {2}};→ 第二层出现2(int),但此处必须是int[][] -
非法:
int[][][] z = {{1, 2}, {3, 4}};→ 只有两层大括号,不够三维
声明与初始化必须一步到位,不能拆开写
用 {...} 初始化属于“数组初始值设定项”,只能出现在声明语句中,或作为方法参数传入:
-
合法:
int[][] a = {{1, 2}, {3, 4}}; -
合法(配合 new):
int[][] b; b = new int[][]{{1, 2}, {3, 4}}; -
非法:
int[][] c; c = {{1, 2}, {3, 4}};→ 编译报错:“非法的表达式开始” -
var 声明要显式 new:
var d = new int[][]{{1}, {2, 3}};✅;var e = {{1}, {2}};❌(类型无法推断)
不规则数组的动态创建:先分配外层,再逐行 new
如果需要各行长度不同,又不想写死内容,就手动分步分配:
-
int[][] arr = new int[4][];→ 分配 4 个null引用 -
arr[0] = new int[2];→ 第 0 行长度为 2 -
arr[1] = new int[5];→ 第 1 行长度为 5 -
arr[2] = new int[]{7, 8, 9};→ 直接赋值带内容的一维数组 - 遍历时必须检查
if (arr[i] != null),否则arr[i].length会抛NullPointerException
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











