ArrayIndexOutOfBoundsException 是 Java 运行时抛出的 RuntimeException,发生在用负数或 ≥ 数组长度的索引访问数组元素时,不强制 try-catch,但会终止当前线程。

ArrayIndexOutOfBoundsException 是什么
这是 Java 运行时抛出的 RuntimeException,发生在你试图用一个非法索引访问数组元素时——比如索引为负数,或大于等于数组长度。它不强制要求 try-catch,但一旦发生,程序默认终止当前线程(主线程则整个应用崩溃)。
常见触发场景和写法
不是所有“看起来越界”的写法都会立刻报错;关键看执行时是否真去读/写了那个位置。
-
int[] arr = new int[3]; arr[3] = 5;→ 报错:索引3超出合法范围[0, 2] for (int i = 0; i → 循环末尾必然越界,因为条件用了-
arr[arr.length - 1]安全;arr[arr.length]不安全 - 空数组
new int[0]:任何非负索引(包括0)都越界
如何预防而非仅捕获
捕获 ArrayIndexOutOfBoundsException 是下策——它说明逻辑已有缺陷。优先靠编码习惯和工具提前拦截:
- 遍历数组统一用
for (int i = 0; i ,避免手写边界常量 - 用增强 for 循环(
for (int x : arr))彻底规避索引操作 - 对入参做校验:
if (index = arr.length) throw new IllegalArgumentException("index out of bounds"); - IDE(如 IntelliJ)会标红明显越界访问;启用编译器警告(如
-Xlint:arraybounds)可发现部分静态风险
什么时候可以 catch 它
极少情况需捕获,典型是解析不可信外部数据(如用户输入的索引字符串),且业务允许降级处理:
立即学习“Java免费学习笔记(深入)”;
try {
int idx = Integer.parseInt(userInput);
result = arr[idx];
} catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {
result = defaultValue; // 不让异常穿透到上层
}注意:不要用空 catch 块吞掉它,也不要把它转成 RuntimeException 再抛——掩盖问题比暴露更危险。
越界本质是逻辑错误,不是意外事件。修复代码里的索引计算,比写一堆 try-catch 更可靠。










