Java数组越界是运行时异常,需从循环边界、索引校验和null/空数组三方面主动防护:下标必须满足0≤index<arr.length,循环用i<arr.length,动态索引须显式检查,取模需防负值,且必先判arr!=null。

Java中数组越界(ArrayIndexOutOfBoundsException)不是编译错误,而是在运行时才暴露的隐患。安全遍历一维数组的关键,不是等它出错再补救,而是从循环结构、索引逻辑和数据源头三方面主动设防。
用对循环边界,杜绝基础越界
一维数组合法下标范围恒为 [0, arr.length) ——即最小是0,最大是 arr.length - 1。所有循环必须严格匹配这个闭开区间:
- 正向遍历:写
for (int i = 0; i ,别用 <code><=或硬编码数字 - 反向遍历:起点必须是
i = arr.length - 1,终止条件是i >= 0,不是从arr.length开始 - 配对操作(如比较
arr[i]和arr[i + 1]):上限设为i ,否则最后一轮 <code>i + 1必然越界
绕开索引,优先用更安全的遍历方式
不需要下标本身时,手动管理索引纯属增加风险。JVM 提供了零越界可能的替代方案:
- 只读遍历一律用增强 for 循环:
for (int x : arr),JVM 自动控制范围,无需任何判断 - 需要索引但想省心:改用
ArrayList,配合list.size()和list.get(i),语义清晰且部分方法自带检查 - 复杂逻辑可转流式操作:
IntStream.range(0, arr.length).forEach(i -> {...}),边界由流自身保证
动态索引必须校验,不能靠“应该没问题”
用户输入、接口返回、字符串 split() 结果、取模/除法计算值……这些都不是可信索引,每次使用前都必须显式检查:
立即学习“Java免费学习笔记(深入)”;
- 标准校验写法:
if (index >= 0 && index ,负数和超长都要防 -
split()后先判空:String[] parts = s.split(","); if (parts.length > 0) { use parts[0]; } - 取模不等于安全:若
i可能为负,i % arr.length仍可能为负,应改用(i % arr.length + arr.length) % arr.length
空数组与 null 一起兜底,避免混淆异常类型
访问前漏判 null 会抛 NullPointerException,容易误以为是越界;空数组长度为 0,直接遍历也会越界:
- 统一防护写法:
if (arr != null && index >= 0 && index - 方法入口快速失败:
if (arr == null || arr.length == 0) throw new IllegalArgumentException("Array must be non-null and non-empty"); - 对空数组有业务含义的场景,应显式分支处理,而非让逻辑穿透到索引访问语句


















