ArrayIndexOutOfBoundsException是运行时异常,需通过校验length、规范遍历、避免硬编码下标及使用安全集合来预防。

Java中数组越界(ArrayIndexOutOfBoundsException)本质是访问了不存在的索引位置,它在编译期无法被发现,属于典型的运行时异常。避免它的核心不是“捕获”,而是“预防”——通过明确边界、规范操作和借助更安全的替代结构,从源头消除风险。
明确数组长度,始终用 length 校验索引
Java数组长度由 array.length 决定,且不可变。任何硬编码下标(如 arr[10])或依赖外部输入而未校验的行为都极危险。
- 遍历数组务必使用
for (int i = 0; i ,而非i 或固定上限 - 访问前主动检查:
if (index >= 0 && index < arr.length) { System.out.println(arr[index]); } else { throw new IllegalArgumentException("索引 " + index + " 超出有效范围 [0, " + (arr.length - 1) + "]"); } - 对负数索引要特别警惕——Java不支持负向索引(不像Python),
arr[-1]直接抛异常
慎用用户输入或外部数据作为数组索引
表单参数、配置文件读取值、网络请求字段等若未经校验就用于数组访问,是越界高发场景。
- 将字符串转为整数后,必须验证是否为有效非负整数,再与数组长度比对
- 示例:处理HTTP请求中的分页索引
page=3&size=20,若用于获取缓存数组某项,需先确认page * size - 优先考虑封装成方法,把校验逻辑内聚,例如:
safeGet(arr, index, defaultValue)
用集合类替代原始数组,获得动态边界与增强API
除非有明确性能要求或底层交互需求,日常开发中推荐用 ArrayList、LinkedList 等集合替代裸数组。
立即学习“Java免费学习笔记(深入)”;
-
ArrayList.get(i)虽仍可能越界,但配合list.size()更直观;更重要的是可使用list.subList(from, to)等安全切片方法 - 利用
Optional.ofNullable(list.get(i))或自定义工具方法实现空安全访问 - 需要频繁增删时,数组完全不适用——改用集合可彻底规避因容量误判导致的越界
善用现代工具与约定提升健壮性
静态检查和编码习惯能提前拦截多数隐患。
- 启用IDE警告(如IntelliJ的 “Array access can produce ArrayIndexOutOfBoundsException”)
- 在关键索引操作处添加断言:
assert index >= 0 && index (生产环境需开启-ea) - 单元测试覆盖边界用例:索引为
-1、0、arr.length - 1、arr.length、Integer.MAX_VALUE - 考虑使用
Arrays.asList()包装后调用contains()、indexOf()等语义化方法,减少手动索引操作










