Error ExceptionInInitializer en Java
-
Breve introducción a
ExceptionInInitializerErroren Java -
Manejar el
ExceptionInInitializerErroren 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
