Improve Article
Save Article
Improve Article
Save Article
An unexpected, unwanted event that disturbed the normal flow of a program is called an Exception.
There are mainly two types of exception in Java:
1. Checked Exception
2. Unchecked Exception
ExceptionInInitializerError is the child class of the Error class and hence it is an unchecked exception. This exception is rise automatically by JVM when JVM attempts to load a new class as, during class loading, all static variables and static initializer block are being evaluated. This exception also acts as a signal that tells us that an unexpected exception has occurred in a static initializer block or in the assignment of value to the static variable.
There are basically two cases when ExceptionInInitializerError can occur in a Java Program:
1. ExceptionInInitializerError While Assigning Value To The Static Variable
In the below example we assign a static variable to 20/0 where 20/0 gives an undefined arithmetic behavior and hence there occurs an exception in the static variable assignment and ultimately we will get ExceptionInInitializerError.
Java
class
GFG {
static
int
x =
20
/
0
;
public
static
void
main(String[] args)
{
System.out.println(
"The value of x is "
+ x);
}
}
2. ExceptionInInitializerError While Assigning Null Value Inside A Static Block
In the below example we have declared a static block inside which we create a string s and assign a null value to it, and then we are printing the length of string, so we will get NullPointerException because we were trying to print the length of a string that has its value as null and as we see that this exception occurs inside the static block, so we will get ExceptionInInitializerError.
Java
class
GFG {
static
{
String s =
null
;
System.out.println(s.length());
}
public
static
void
main(String[] args)
{
System.out.println(
"GeeksForGeeks Is Best"
);
}
}
How to Resolve Java.lang.ExceptionInInitializerError ?
- We can resolve the java.lang.ExceptionInInitializerError by ensuring that static initializer block of classes does not throw any Runtime Exception.
- We can resolve also resolve this exception by ensuring that the initializing static variable of classes also doesn’t throw any Runtime Exception.
- Brief Introduction to
ExceptionInInitializerError
in Java - Handle the
ExceptionInInitializerError
in Java - Conclusion
In this article, we will learn about the ExceptionInInitializerError
in Java.
Brief Introduction to ExceptionInInitializerError
in Java
ExceptionInInitializerError
is an unchecked exception in Java, and it’s the child of the Error
class. It falls in the category of Runtime Exceptions.
In Java, whenever the JVM (Java Virtual Machine) fails to evaluate a static initializer block or instantiate or assign a value to a static variable, an exception ExceptionInInitializerError
occurs. This indicates that something has gone wrong in the static initializer.
Whenever this exception occurs inside the static initializer, Java maintains the reference to the actual exception as the root cause by wrapping the exception inside the object of the ExceptionInInitializerError
class.
Examples of ExceptionInInitializerError
in Java
Based on the above discussion, ExceptionInInitializerError
occurs in major cases. Let’s see some examples to understand it better.
Example 1: Scenario where we are assigning values to the static variable.
public class Test {
static int x = 100/0;
public static void main(String []args)
{
System.out.println("Value of x is "+x);
}
}
Output:
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.ArithmeticException: / by zero
at Test.<clinit>(Test.java:4)
In the above code, we assigned a 100/0
value to a static variable x
, which gives an undefined arithmetic behavior, so an exception occurs while assigning values to the static variable, which finally gives us the ExceptionInInitializerError
.
We can also observe in the output that the actual exception ArithmeticException
is wrapped inside an instance of the ExceptionInInitializerError
class.
Example 2: Scenario where inside the static blocks, null values are assigned.
public class Test {
static
{
String str = null;
System.out.println(str.length());
}
public static void main(String []args)
{ }
}
Output:
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.NullPointerException: Cannot invoke "String.length()" because "str" is null
at Test.<clinit>(Test.java:7)
In the above code, we have created a static block inside which we have a string str
with the null
value. So, when we try to get its length using the length()
method, we get NullPointerException
as we print the length of a string with null
as its value.
But, as this exception occurs inside a static block, it will be wrapped inside the ExceptionInInitializerError
class, and we get ExceptionInInitializerError
in the output.
Handle the ExceptionInInitializerError
in Java
ExceptionInInitializerError
in Java can be avoided by ensuring the following points:
- Make sure that initializing static variables in a program doesn’t throw any Runtime Exception.
- Make sure that the static initializer blocks in a program don’t throw any Runtime Exception.
Conclusion
In this article, we learned about ExceptionInInitializerError
in Java, indicating that some exceptions occurred while initializing a static variable or evaluating a static block. This error works as a runtime wrapper for the underlying exception and stops the JVM until the programmer resolves the underlying exception.
Неизвестное нежелательное событие, нарушившее нормальный ход выполнения программы, называется исключением.
В Java есть в основном два типа исключений:
1. Проверяемое исключение
2. Непроверенное исключение
ExceptionInInitializerError — это дочерний класс класса Error и, следовательно, это непроверенное исключение. Это исключение автоматически создается JVM, когда JVM пытается загрузить новый класс, поскольку во время загрузки класса оцениваются все статические переменные и блок статического инициализатора. Это исключение также действует как сигнал, который сообщает нам, что непредвиденное исключение произошло в блоке статического инициализатора или при присвоении значения статической переменной.
В основном есть два случая, когда ExceptionInInitializerError может возникнуть в программе Java:
1. ExceptionInInitializerError при присвоении значения статической переменной
В приведенном ниже примере мы назначаем статической переменной 20/0, где 20/0 дает неопределенное арифметическое поведение, и, следовательно, возникает исключение в назначении статической переменной, и в конечном итоге мы получим ExceptionInInitializerError.
Ява
class
GFG {
static
int
x =
20
/
0
;
public
static
void
main(String[] args)
{
System.out.println(
"The value of x is "
+ x);
}
}
2. ExceptionInInitializerError при присвоении нулевого значения внутри статического блока
В приведенном ниже примере мы объявили статический блок, внутри которого мы создаем строку s и присваиваем ей нулевое значение, а затем печатаем длину строки, поэтому мы получим исключение NullPointerException, потому что мы пытались распечатать длину строка, значение которой равно нулю, и, как мы видим, это исключение возникает внутри статического блока, поэтому мы получим ExceptionInInitializerError.
Ява
class
GFG {
static
{
String s =
null
;
System.out.println(s.length());
}
public
static
void
main(String[] args)
{
System.out.println(
"GeeksForGeeks Is Best"
);
}
}
Как разрешить Java.lang.ExceptionInInitializerError?
- Мы можем разрешить java.lang.ExceptionInInitializerError, убедившись, что статический блок инициализатора классов не генерирует никаких исключений времени выполнения.
- Мы также можем разрешить это исключение, убедившись, что инициализирующая статическая переменная классов также не генерирует никаких исключений времени выполнения.
Вниманию читателя! Не прекращайте учиться сейчас. Ознакомьтесь со всеми важными концепциями Java Foundation и коллекций с помощью курса «Основы Java и Java Collections» по доступной для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .