请注意,我知道关于
的规则ExceptionInInitializerErrors
它说:任何 静态 block 中抛出的异常被包装到 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/