Java报错”ExceptionInInitializerError”的原因以及解决办法

  • Post category:Java

Java异常ExceptionInInitializerError通常是在初始化静态变量的时候出现的异常。它表示在类的静态初始化中抛出了异常,导致该类无法成功加载。

ExceptionInInitializerError的产生原因:

  1. 静态代码块或静态变量初始化时发生异常

  2. 依赖于native本地库的类,本地库路径不正确或native代码中出现了语法错误等问题

解决办法:

1.查看控制台日志,找到引发该异常的异常原因所在的类,进行问题排查解决。

2.若异常信息中有”Could not initialize class”,则表示某个类的静态初始化失败,需要进一步查找该类的静态初始化时出现的具体异常信息,并进行解决。

以下是两个示例:

示例1:

public class Demo {
    static {
        int i = 1 / 0;
    }

    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

上面代码中,在静态代码块中除以0会抛出ArithmeticException异常,在程序进入main()方法之前,该异常将使得程序初始化失败,从而触发ExceptionInInitializerError异常。

解决方法:

在处理静态代码块时,需要注意最好不要在静态块中执行容易引发异常的操作。

示例2:

public class NativeLibrary {
    static {
        System.loadLibrary("NativeCode");
    }

    public native void wellcome();
}

public class Demo {
    public static void main(String[] args) {
        NativeLibrary nl = new NativeLibrary();
        nl.wellcome();
    }
}

上面代码中,NativeLibrary类的静态代码块中使用System.loadLibrary()方法加载本地库NativeCode时未给出正确的本地库路径,导致初始化失败,进而抛出了ExceptionInInitializerError异常。

解决方法:

加载本地库时,需要保证本地库的路径正确,并且不能在本地库中引发语法错误等问题。