ExceptionInInitializer-Fehler in Java

Suraj P 12 Oktober 2023
  1. Kurze Einführung in ExceptionInInitializerError in Java
  2. Behandeln Sie den ExceptionInInitializerError in Java
  3. Abschluss
ExceptionInInitializer-Fehler in Java

In diesem Artikel lernen wir den ExceptionInInitializerError in Java kennen.

Kurze Einführung in ExceptionInInitializerError in Java

ExceptionInInitializerError ist eine ungeprüfte Ausnahme in Java und das Kind der Klasse Error. Es fällt in die Kategorie der Laufzeitausnahmen.

Immer wenn die JVM (Java Virtual Machine) in Java einen statischen Initialisierungsblock nicht auswertet oder eine statische Variable instanziiert oder ihr einen Wert zuweist, tritt eine Ausnahme ExceptionInInitializerError auf. Dies weist darauf hin, dass im statischen Initialisierer etwas schief gelaufen ist.

Immer wenn diese Ausnahme innerhalb des statischen Initialisierers auftritt, behält Java den Verweis auf die eigentliche Ausnahme als Hauptursache bei, indem es die Ausnahme innerhalb des Objekts der Klasse ExceptionInInitializerError umschließt.

Beispiele für ExceptionInInitializerError in Java

Basierend auf der obigen Diskussion tritt in schwerwiegenden Fällen ExceptionInInitializerError auf. Sehen wir uns einige Beispiele an, um es besser zu verstehen.

Beispiel 1: Szenario, in dem wir der statischen Variablen Werte zuweisen.

public class Test {
  static int x = 100 / 0;
  public static void main(String[] args) {
    System.out.println("Value of x is " + x);
  }
}

Ausgang:

Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.ArithmeticException: / by zero
    at Test.<clinit>(Test.java:4)

Im obigen Code haben wir einer statischen Variablen x einen 100/0-Wert zugewiesen, was zu einem undefinierten arithmetischen Verhalten führt, sodass beim Zuweisen von Werten zu der statischen Variablen eine Ausnahme auftritt, die uns schließlich den ExceptionInInitializerError liefert.

Wir können in der Ausgabe auch beobachten, dass die eigentliche Ausnahme ArithmeticException in eine Instanz der Klasse ExceptionInInitializerError eingeschlossen ist.

Beispiel 2: Szenario, in dem innerhalb der statischen Blöcke Nullwerte zugewiesen werden.

public class Test {
  static {
    String str = null;
    System.out.println(str.length());
  }

  public static void main(String[] args) {}
}

Ausgang:

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)

Im obigen Code haben wir einen statischen Block erstellt, in dem wir eine Zeichenfolge str mit dem Wert null haben. Wenn wir also versuchen, seine Länge mit der Methode length() abzurufen, erhalten wir NullPointerException, da wir die Länge eines Strings mit null als Wert ausgeben.

Da diese Ausnahme jedoch innerhalb eines statischen Blocks auftritt, wird sie in die Klasse ExceptionInInitializerError eingeschlossen, und wir erhalten ExceptionInInitializerError in der Ausgabe.

Behandeln Sie den ExceptionInInitializerError in Java

ExceptionInInitializerError in Java kann vermieden werden, indem folgende Punkte sichergestellt werden:

  1. Stellen Sie sicher, dass die Initialisierung statischer Variablen in einem Programm keine Runtime Exception auslöst.
  2. Stellen Sie sicher, dass die statischen Initialisierungsblöcke in einem Programm keine Runtime Exception auslösen.

Abschluss

In diesem Artikel haben wir von ExceptionInInitializerError in Java erfahren, was darauf hinweist, dass beim Initialisieren einer statischen Variablen oder beim Auswerten eines statischen Blocks einige Ausnahmen aufgetreten sind. Dieser Fehler fungiert als Laufzeit-Wrapper für die zugrunde liegende Ausnahme und stoppt die JVM, bis der Programmierer die zugrunde liegende Ausnahme behebt.

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

Verwandter Artikel - Java Error