Error ExceptionInInitializer en Java
-
Breve introducción a
ExceptionInInitializerError
en Java -
Manejar el
ExceptionInInitializerError
en Java - Conclusión
En este artículo, aprenderemos sobre ExceptionInInitializerError
en Java.
Breve introducción a ExceptionInInitializerError
en Java
ExceptionInInitializerError
es una excepción no verificada en Java, y es el hijo de la clase Error
. Cae en la categoría de excepciones de tiempo de ejecución.
En Java, cada vez que la JVM (Java Virtual Machine) no puede evaluar un bloque inicializador estático o crear una instancia o asignar un valor a una variable estática, se produce una excepción ExceptionInInitializerError
. Esto indica que algo salió mal en el inicializador estático.
Cada vez que esta excepción ocurre dentro del inicializador estático, Java mantiene la referencia a la excepción real como la causa raíz al envolver la excepción dentro del objeto de la clase ExceptionInInitializerError
.
Ejemplos de ExceptionInInitializerError
en Java
Según la discusión anterior, ExceptionInInitializerError
ocurre en casos importantes. Veamos algunos ejemplos para entenderlo mejor.
Ejemplo 1: Escenario donde estamos asignando valores a la variable estática.
public class Test {
static int x = 100 / 0;
public static void main(String[] args) {
System.out.println("Value of x is " + x);
}
}
Producción :
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.ArithmeticException: / by zero
at Test.<clinit>(Test.java:4)
En el código anterior, asignamos un valor 100/0
a una variable estática x
, lo que da un comportamiento aritmético indefinido, por lo que ocurre una excepción al asignar valores a la variable estática, lo que finalmente nos da el ExceptionInInitializerError
.
También podemos observar en la salida que la excepción real ArithmeticException
está envuelta dentro de una instancia de la clase ExceptionInInitializerError
.
Ejemplo 2: Escenario donde dentro de los bloques estáticos se asignan valores nulos.
public class Test {
static {
String str = null;
System.out.println(str.length());
}
public static void main(String[] args) {}
}
Producción :
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)
En el código anterior, hemos creado un bloque estático dentro del cual tenemos una cadena str
con el valor nulo
. Entonces, cuando tratamos de obtener su longitud usando el método longitud()
, obtenemos NullPointerException
ya que imprimimos la longitud de una cadena con null
como su valor.
Pero, como esta excepción ocurre dentro de un bloque estático, se incluirá dentro de la clase ExceptionInInitializerError
y obtendremos ExceptionInInitializerError
en la salida.
Manejar el ExceptionInInitializerError
en Java
ExceptionInInitializerError
en Java se puede evitar asegurando los siguientes puntos:
- Asegúrese de que la inicialización de variables estáticas en un programa no genere ninguna excepción de tiempo de ejecución.
- Asegúrese de que los bloques de inicialización estáticos en un programa no arrojen ninguna excepción de tiempo de ejecución.
Conclusión
En este artículo, aprendimos sobre ExceptionInInitializerError
en Java, lo que indica que ocurrieron algunas excepciones al inicializar una variable estática o evaluar un bloque estático. Este error funciona como contenedor de tiempo de ejecución para la excepción subyacente y detiene la JVM hasta que el programador resuelve la excepción subyacente.
Artículo relacionado - Java Error
- Arreglar Java fue iniciado por el código de salida devuelto = 1
- Arreglar JAVA_HOME no se puede determinar a partir del error de registro en R
- Arreglar java.io.IOException: No queda espacio en el dispositivo en Java
- Arreglar Java.IO.NotSerializableException en Java
- Arreglar Java.Lang.IllegalStateException de Android: no se pudo ejecutar el método de la actividad
- Arreglar Java.Lang.NoClassDefFoundError: No se pudo inicializar el error de clase