java.lang.ExceptionInInitializerError, Verursacht durch: java.lang.NullPointerException
Dies ist von OCJP Beispiel. Ich habe folgenden code geschrieben
public class Test {
static int x[];
static {
x[0] = 1;
}
public static void main(String... args) {
}
}
Ausgabe: java.lang.ExceptionInInitializerError
Verursacht durch: java.lang.NullPointerException bei x[0] = 1;
Warum es wirft NullPointerException
und nicht ArrayIndexOutOfBoundException
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weil Sie nicht das array initialisiert.
Initialize array
Grund für NullPointerException:
Sie Treffer mit dem kühner-Punkt, da das array
null
.Es wirft NullPointerException weil
x is null
.x[] deklariert, aber nicht initialisiert.
Vor Initialisierung, Objekte haben den Wert null, und primitive default-Werte (z.B. 0, false etc)
Also sollte Sie initialisiert werden, wie unten gezeigt:
ArrayIndexOutOfBoundException wird auftreten, wenn das array initialisiert wird, und der Zugriff mit einem ungültigen index.
Den
NullPointerException
hinausgeworfen in diestatic block
, wo Sie versuchen, einen Wert zuweisen 1 auf das erste element des array (x[0] = 1). Bewusst sein, die int[] array namens x ist noch nicht intilized.Gibt es 2 Möglichkeiten für Sie, um es zu beheben.
1 Verwenden
static int x[] = new int[5];
statt
static int x[] ;
2
Ändern
Zu
Denken Sie daran:
Initialize the array before you use it.
Du nicht initialisieren Ihrer
x
array. Es gibt einen Unterschied zwischen Deklaration und Initialisierung von Variablen. Wenn Sie schreibenint x[];
Sie nur eine variable deklarieren, die als Instanz-Feld, initialisiert mit dem Standardwertnull
. Eigentlich ein array erstellen, müssen Sie schreibenint x[] = new int[10];
oder die Größe, die Sie brauchen.Der Grund für eine
NullPointerException
stattArrayIndexOutOfBounds
ist, dass letztere wird ausgelöst, wenn Sie haben ein array, und versuchen Sie, um eine position außerhalb seiner Grenzen, aber in Ihrem Fall brauchen Sie nicht ein array an alle und versuchen, etwas in eine nicht-exsting array. Deshalb ist eineNPE
Ergebnisse in NullPointerException, weil Ihre x-array nicht initialisiert (null)
ArrayIndexOutOfBoundException passieren würde, wenn Sie über einen index out of bounds:
Ist es einfach. Hier ist x
null
, und Sie versuchen, speichern Sie einen Wert in nicht initialisiertenarray
.DaherNullPointerException
NullPointerException:
Diese Ausnahme wird ausgelöst, wenn Sie versuchen, auf die Eigenschaften des ein nicht initialisiertes Objekt
ArrayIndexOutOfBoundsException:
Diese Ausnahme wird geworfen, wenn das array initialisiert wird ein Objekt, sondern Sie versuchen, Zugriff auf das array mit einem ungültigen index.
In Ihrem Fall, da Sie noch nicht initialisiert, das Objekt, sind immer NullPointerException. Sie haben eine person namens "x", aber nicht assoziiert jeder Mensch, der(array-Objekt).
Wenn Sie ändern Sie Zeile 2 zu,
dann erhalten Sie ArrayIndexOutOfBoundsException statt NullPointerException.
ExceptionInInitializerError ist eine Ungeprüfte Ausnahme.
Während der Ausführung, wird der statische block, variable, Initialisierung, wenn keine exception kommt, dann ist es ExceptionInInitializerError.
Beispiel:
Ausgabe:
Beispiel:
Ausgabe: