请注意,我知道有关的规则
ExceptionInInitializerErrors
它说:任何
静态块中抛出的异常被包装到
ExceptionInInitializerError,然后抛出ExceptionInInitializerError。
但是我的问题是:为什么
java.lang.ArrayIndexOutOfBoundsException
它扔在这里吗?**
class AX {
static int[] x = new int[0];
static {
x[0] = 10;
}
public static void main(String[] args){
AX ax = new AX();
}
}
最佳答案
这将创建一个容量为0的数组:
static int[] x = new int[0];
这将值分配给
x
的第一个元素:static {
x[0] = 10;
}
不幸的是,如前所述,
x
的容量为0,它根本不能包含任何元素。这就是为什么您得到ExceptionInInitializerError
的原因。如果您仔细查看堆栈跟踪,
它会显示更多的光线,因为应该有这样一条线:
Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
数字0是超出范围的数组索引:
如果数组不能包含任何元素,则索引0超出范围。
关于java - 为什么在这里ExceptionInInitializerError?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32105408/