java报错java.lang.IndexOutOfBoundsException

java.lang.IndexOutOfBoundsException 是Java中常见的运行时异常,表示索引超出范围。这种异常通常发生在尝试访问数组、集合或字符串中不存在的索引位置时。

原因:

  1. 访问不存在的数组元素索引

    • 数组索引从0开始,如果尝试访问大于等于数组长度的索引或负数索引,就会抛出 IndexOutOfBoundsException
    java
    int[] arr = new int[5]; System.out.println(arr[5]); // 试图访问索引为5的元素,超出了数组长度
  2. 访问集合中不存在的索引

    • 在使用 ArrayList 等集合时,如果尝试访问超出集合大小的索引,同样会抛出异常。
    java
    ArrayList<Integer> list = new ArrayList<>(); list.add(10); System.out.println(list.get(1)); // 尝试获取索引为1的元素,但实际只有一个元素,会抛出异常
  3. 使用字符串的 charAt 方法时超出索引

    • 当使用 charAt 方法获取字符串中不存在的字符索引时,也会引发 IndexOutOfBoundsException
    java
    String str = "hello"; System.out.println(str.charAt(10)); // 尝试获取索引为10的字符,超出了字符串长度

解决方法:

  • 检查索引范围:在访问数组、集合或字符串的元素之前,始终确保索引在有效范围内(即大于等于0且小于长度)。
  • 使用循环:在遍历数组或集合时,使用合适的循环条件来避免访问超出范围的索引。
  • 异常处理:在可能引发 IndexOutOfBoundsException 的代码块中使用 try-catch 块捕获异常,并适当处理异常情况。
java
try { int[] arr = new int[5]; System.out.println(arr[5]); // 可能会抛出 IndexOutOfBoundsException } catch (IndexOutOfBoundsException e) { System.out.println("访问数组超出范围:" + e.getMessage()); }

通过理解和避免 IndexOutOfBoundsException 的发生,可以提高程序的稳定性和可靠性,确保在访问数组、集合和字符串时不会出现越界访问的错误。