java - 为什么这里是 ExceptionInInitializerError?

标签 java exception static

请注意,我知道关于

的规则

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/

相关文章:

java - 如何使用三个表编写这个复杂的 MySQL 查询?

c - C中函数内部的静态变量

java - 非静态方法可以修改静态变量吗

c# - 如何连接两个异常?

java - java中最常用的运行时异常有哪些?

c# - 在中间件asp.net core 2中设置捕获错误的主体

java - 静态建议。我究竟做错了什么?

java - Hibernate MySQL 查找未映射的表和列

java - 跟踪鼠标单击的面板

java - 无法从 JTable 中的模型接收数据