IndexOutOfBoundsException 是因访问集合中不存在的索引位置引发的运行时异常,需在访问前校验索引是否满足 ≥0 且

遇到 IndexOutOfBoundsException,说明你试图访问数组、List、String 等结构中不存在的位置。这不是语法错误,而是运行时逻辑问题——索引超出了合法范围(比如下标为 -1 或 ≥ size)。关键不是“捕获异常”,而是提前预防。
检查索引边界再访问
几乎所有越界都源于没校验索引是否有效。访问前必须确认:
- 数组:索引 ≥ 0 且 < array.length
- List/String:索引 ≥ 0 且 < list.size() 或 str.length()
- 写法示例:错误 ——
list.get(i)前没判断i - 正确做法:
if (i >= 0 && i - 循环中别用
:遍历 List 用for (int i = 0; i ,不是
注意空集合或空数组的特殊情况
空集合 size 是 0,此时任何非负索引(如 0)都会越界。容易忽略的是:方法返回 null 或空集合后直接调用 get(0)。
- 先判空:
if (list != null && !list.isEmpty()) { ... } - 避免链式调用陷阱:
getData().get(0)中getData()返回 null 或空列表就会崩 - 工具类可帮忙:Apache Commons Collections 的
CollectionUtils.isNotEmpty(list)
警惕增强 for 循环和迭代器的误用
增强 for 循环本身不会抛这个异常,但若在循环中修改集合(如 remove),再用下标访问就容易出错;另外,把“下标”和“元素值”混淆也会越界。
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
- 错误示范:
for (int x : list) { list.get(x); }—— x 是元素值,不是下标 - 并发修改时,优先用迭代器的
remove(),而不是按索引删 - 需要下标时,老实用普通 for 循环,别强行转
调试时快速定位问题位置
异常堆栈会明确指出哪行代码、哪个类、哪个索引值越界。重点看 message 里的数字(如 “Index: 5, Size: 3”)。
- 加日志:在访问前打印索引和 size,例如
System.out.println("i=" + i + ", size=" + list.size()); - IDE 调试:在抛异常那行设断点,观察变量实时值
- 单元测试覆盖边界值:i = -1、i = 0、i = size-1、i = size
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










