Error ExceptionInInitializer en Java

Suraj P 12 octubre 2023
  1. Breve introducción a ExceptionInInitializerError en Java
  2. Manejar el ExceptionInInitializerError en Java
  3. Conclusión
Error ExceptionInInitializer en Java

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:

  1. Asegúrese de que la inicialización de variables estáticas en un programa no genere ninguna excepción de tiempo de ejecución.
  2. 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.

Autor: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub

Artículo relacionado - Java Error