Java一维数组长度通过length属性获取,非方法调用且不可修改;越界异常源于访问[0, length)外索引,须用length动态校验;length是public final字段,null时访问抛NullPointerException。

Java 一维数组的长度通过 length 属性直接获取,不是方法调用,也不能在运行时修改;越界异常(ArrayIndexOutOfBoundsException)本质是访问了 [0, length) 范围之外的索引,关键在于始终用 length 动态校验边界。
用 length 属性安全获取数组长度
数组对象自带 public final 的 length 字段,读取它不消耗性能,也不抛异常。注意不是 length()(那是 String 或集合的方法)。
- 正确写法:
int len = arr.length; - 错误写法:
arr.length();(编译报错)、arr.size();(不存在) - 即使数组为
null,访问length会触发NullPointerException,不是越界异常——所以判空优先于读 length
遍历数组时天然规避越界
使用标准 for 循环或增强 for(for-each),只要不手动构造非法下标,就不会越界。
- 传统 for 推荐写法:
for (int i = 0; i —— 条件用 <code>,不是 <code> - 增强 for 更安全:
for (int x : arr) { ... }—— 完全屏蔽下标,适合只读或简单处理 - 避免硬编码长度:
for (int i = 0; i 在 arr 长度不足 10 时必然越界
访问前主动校验索引有效性
当需要根据变量下标访问(如用户输入、计算结果、API 返回值),必须显式检查范围。
立即学习“Java免费学习笔记(深入)”;
- 校验模板:
if (index >= 0 && index - 常见易错点:只判断
index ,忽略负数索引;或把条件写成 <code>index (等价但冗余,且易漏减号) - 工具类封装建议:可写一个
safeGet(arr, index, defaultValue)方法,内部做校验并返回默认值
警惕 length 和 null 的组合风险
数组引用可能为 null,此时读 length 抛 NullPointerException,和越界无关但常被混淆。
- 安全访问模式:
if (arr != null && index >= 0 && index - 初始化防御:方法参数如果是数组,开头加
Objects.requireNonNull(arr, "array must not be null"); - 日志或调试时打印
arr == null ? "null" : arr.length,快速定位是空指针还是真越界
不复杂但容易忽略:length 是字段、校验用小于号、null 和越界是两类问题,分开处理就稳了。


















