Java异常ExceptionInInitializerError通常是在初始化静态变量的时候出现的异常。它表示在类的静态初始化中抛出了异常,导致该类无法成功加载。
ExceptionInInitializerError的产生原因:
-
静态代码块或静态变量初始化时发生异常
-
依赖于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异常。
解决方法:
加载本地库时,需要保证本地库的路径正确,并且不能在本地库中引发语法错误等问题。