java - ArrayIndexOutOfBoundException 和 IndexOutOfBoundsException

标签 java exception

这里的异常是 IndexOutOfBoundsException:

public static void main(String[] args) {
    List<Integer> elements = new ArrayList<>();
     elements.add(10);
     int firstElmnt = elements.get(1);
     System.out.println(firstElmnt);
}

但这里的异常是 ArrayIndexOutOfBoundsException:

public static void main(String[] args) {
    List<Integer> elements = new ArrayList<>();
     elements.add(10);
     int firstElmnt = elements.get(-1);
     System.out.println(firstElmnt);
}

这是否意味着对于负数我们会得到 IndexOutOfBoundException?

最佳答案

List 的 Javadoc 指定抛出 IndexOutOfBoundsException:

if the index is out of range (index < 0 || index >= size())

由于 ArrayIndexOutOfBoundsExceptionIndexOutOfBoundsException 的子类,因此 List 接口(interface)的实现可以选择抛出该异常而不是基类IndexOutOfBoundsException类。

对于超出范围的正索引,此代码会抛出异常:

private void rangeCheck(int index) {
    if (index >= size)
        throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}

另一方面,对于负索引,通过使用负索引访问后备数组会引发异常:

E elementData(int index) {
    return (E) elementData[index];
}

这使得 ArrayList 实现无需显式检查索引是否为负数。

关于java - ArrayIndexOutOfBoundException 和 IndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49738182/

相关文章:

c++ - 当构造函数抛出异常时删除运算符段错误

java - 在一次读取中按长度对文件中的所有单词进行排序。 ( java )

java - 从十六进制格式获取原始 key

java - 使用注释的 Struts 2 验证

java - 无法将 clob 数据类型从数据库获取到 JPA 实体中

java - 如何在 Java 中使二叉搜索树成为完整的二叉搜索树?

java - 带循环的子字符串

c# - 使用现有框架 ConstraintException 来处理数据约束违规

java - 线程错误(jdom.jar(打开文件太多))

windows - 无法在 Windows 32 位上加载 SWT 库