ExceptionInInitializerError

ExceptionInInitializerError

请注意,我知道有关的规则


  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/

10-11 16:47