java报错java.lang.IndexOutOfBoundsException
java.lang.IndexOutOfBoundsException
是Java中常见的运行时异常,表示索引超出范围。这种异常通常发生在尝试访问数组、集合或字符串中不存在的索引位置时。
原因:
访问不存在的数组元素索引:
- 数组索引从0开始,如果尝试访问大于等于数组长度的索引或负数索引,就会抛出
IndexOutOfBoundsException
。
javaint[] arr = new int[5]; System.out.println(arr[5]); // 试图访问索引为5的元素,超出了数组长度
- 数组索引从0开始,如果尝试访问大于等于数组长度的索引或负数索引,就会抛出
访问集合中不存在的索引:
- 在使用
ArrayList
等集合时,如果尝试访问超出集合大小的索引,同样会抛出异常。
javaArrayList<Integer> list = new ArrayList<>(); list.add(10); System.out.println(list.get(1)); // 尝试获取索引为1的元素,但实际只有一个元素,会抛出异常
- 在使用
使用字符串的
charAt
方法时超出索引:- 当使用
charAt
方法获取字符串中不存在的字符索引时,也会引发IndexOutOfBoundsException
。
javaString str = "hello"; System.out.println(str.charAt(10)); // 尝试获取索引为10的字符,超出了字符串长度
- 当使用
解决方法:
- 检查索引范围:在访问数组、集合或字符串的元素之前,始终确保索引在有效范围内(即大于等于0且小于长度)。
- 使用循环:在遍历数组或集合时,使用合适的循环条件来避免访问超出范围的索引。
- 异常处理:在可能引发
IndexOutOfBoundsException
的代码块中使用try-catch
块捕获异常,并适当处理异常情况。
javatry {
int[] arr = new int[5];
System.out.println(arr[5]); // 可能会抛出 IndexOutOfBoundsException
} catch (IndexOutOfBoundsException e) {
System.out.println("访问数组超出范围:" + e.getMessage());
}
通过理解和避免 IndexOutOfBoundsException
的发生,可以提高程序的稳定性和可靠性,确保在访问数组、集合和字符串时不会出现越界访问的错误。