java数组只有length字段而非length()方法,误用会导致编译错误;多维数组需用matrix[i].length获取每行长度;arrayindexoutofboundsexception应通过前置边界检查预防而非捕获。

Java 数组没有 length() 方法,只有 public final int length 字段。混淆这点是越界异常的常见源头,而健壮性不靠兜底,靠设计前置防御。
数组 length 是字段,不是方法
写成 arr.length() 或 arr.size() 都会编译失败。这是语法错误,不是运行时问题——IDE 和编译器能立刻发现。常见混淆来自 JavaScript 的 array.length() 或 Python 的 len(),或误把 String.length() 套用到数组上。
-
int[] a = {1, 2, 3}; int len = a.length;✅ 正确 -
a.length();❌ 编译报错:cannot resolve method 'length()' -
a.size();❌ 编译报错:cannot find symbol: variable size
多维数组的 length 只表示首维大小
int[][] matrix = new int[4][7]; 中,matrix.length 是 4(行数),matrix[0].length 才是 7(第一行列数)。每行长度可能不同,所以内层循环必须用 matrix[i].length,不能硬写 7 或复用 matrix.length。
- 错误写法:
for (int j = 0; j → 把列当行遍历 - 正确写法:
for (int i = 0; i - 空行需判空:
if (matrix[i] != null) { ... },避免NullPointerException
ArrayIndexOutOfBoundsException 不该被 catch,而该被预防
这个异常属于 RuntimeException,根源是逻辑缺陷:索引超出了 0 到 arr.length - 1 的合法范围。它不是“意外”,而是代码没守住边界。
- 禁止写
arr[arr.length]或arr[-1]—— 这些永远非法 - 循环终止条件必须是
i ,不是 <code>i 或 <code>i - 取末位元素前先判空:
if (arr.length > 0) { last = arr[arr.length - 1]; } - 用户输入驱动填充时,用计数器
count控制下标,且每次赋值前检查count
区分数组与集合,避免 length / size 混用
一旦调用 Arrays.asList(arr),返回的是 List,不再是数组。此时 length 失效,必须用 size();反过来,ArrayList 也没有 length 字段。
-
int[] a = {1, 2}; int l1 = a.length;✅ -
List<integer> list = Arrays.asList(a); int l2 = list.size();</integer>✅ -
list.length;❌ 编译错误 -
a.size();❌ 编译错误 - IDE 补全可能同时列出两者,务必看变量声明类型再选
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











