扰乱程序正常流程的无例外的、不需要的事件称为异常。
Java中主要有两种类型的异常:
1.检查异常
2. 未经检查的异常
ExceptionInInitializerError 是Error 类的子类,因此它是一个未经检查的异常。当 JVM 尝试加载新类时,JVM 会自动引发此异常,因为在类加载期间,正在评估所有静态变量和静态初始化块。此异常还充当一个信号,告诉我们在静态初始化程序块中或在将值分配给静态变量时发生了意外异常。
Java程序中发生 ExceptionInInitializerError 的情况基本上有两种:
1. 给静态变量赋值时出现ExceptionInInitializerError
在下面的示例中,我们将一个静态变量分配给 20/0,其中 20/0 给出了未定义的算术行为,因此在静态变量分配中出现异常,最终我们将得到 ExceptionInInitializerError。
Java
// Java Program for showing the ExceptionInInitializerError
// While Assigning Value To The Static Variable
class GFG {
// assignment of static variable
static int x = 20 / 0;
public static void main(String[] args)
{
// printing the value of x
System.out.println("The value of x is " + x);
}
}
Java
// Java Program for showing the ExceptionInInitializerError
// While Assigning Null Value Inside A Static Block
class GFG {
// declaring a static initializer block
static
{
// creating a string and assigning a null value to
// it
String s = null;
// printing the length of string but as the string
// is null so an exception occur in the static block
System.out.println(s.length());
}
public static void main(String[] args)
{
System.out.println("GeeksForGeeks Is Best");
}
}
2. ExceptionInInitializerError 在静态块中分配空值时
在下面的示例中,我们声明了一个静态块,在其中创建了一个字符串s 并为其分配了一个空值,然后我们正在打印字符串的长度,因此我们将得到 NullPointerException,因为我们试图打印 a 的长度其值为 null 的字符串,并且我们看到此异常发生在静态块内,因此我们将得到 ExceptionInInitializerError。
Java
// Java Program for showing the ExceptionInInitializerError
// While Assigning Null Value Inside A Static Block
class GFG {
// declaring a static initializer block
static
{
// creating a string and assigning a null value to
// it
String s = null;
// printing the length of string but as the string
// is null so an exception occur in the static block
System.out.println(s.length());
}
public static void main(String[] args)
{
System.out.println("GeeksForGeeks Is Best");
}
}
如何解决Java.lang.ExceptionInInitializerError ?
- 我们可以通过确保类的静态初始化块不抛出任何运行时异常来解决Java.lang.ExceptionInInitializerError。
- 我们也可以通过确保类的初始化静态变量也不会抛出任何运行时异常来解决此异常。