这里的异常是IndexOutOfBoundsException:
public static void main(String[] args) {
List<Integer> elements = new ArrayList<>();
elements.add(10);
int firstElmnt = elements.get(1);
System.out.println(firstElmnt);
}
但是Exception是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?
答案 0 :(得分:4)
List
的Javadoc指定抛出IndexOutOfBoundsException
:
如果索引超出范围(索引&lt; 0 || index&gt; = size())
由于ArrayIndexOutOfBoundsException
是IndexOutOfBoundsException
的子类,List
接口的实现可以选择抛出该异常而不是基类IndexOutOfBoundsException
类。
对于超出范围的正索引,此代码抛出异常:
private void rangeCheck(int index) {
if (index >= size)
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
另一方面,对于负索引,通过使用负索引访问支持数组会抛出异常:
E elementData(int index) {
return (E) elementData[index];
}
这为ArrayList
实现保存了明确检查索引是否为负的需要。
答案 1 :(得分:-7)
你在第一个代码中得到IndexOutOfBoundsException
,因为在ArrayList
的实现中你有一个大小为10的数组,而你正试图得到该数组的第二个索引,这个index在数组中,但你不在其上添加任何元素。
第二个是ArrayIndexOutOfBoundsException
,因为你试图获得超出数组范围的索引。