Dies ist aus OCJP-Beispiel. Ich habe einen folgenden Code geschrieben
%Vor%Ausgabe: java.lang.ExceptionInInitializerError
Erstellt von: java.lang.NullPointerException at x[0] = 1;
Warum wirft es NullPointerException
und nicht ArrayIndexOutOfBoundException
.
Warum wirft es NullPointerException und nicht ArrayIndexOutOfBoundException.
Weil Sie das Array nicht initialisiert haben.
Array initialisieren
%Vor%Grund für NullPointerException :
Wird ausgelöst, wenn eine Anwendung versucht, in einem Fall, in dem ein Objekt benötigt wird, den Wert null zu verwenden. Dazu gehören:
Sie treffen den fetteren Punkt, da das Array null
ist.
Es wirft NullPointerException wegen x is null
.
x [] wird deklariert, aber nicht initialisiert.
Vor der Initialisierung haben Objekte einen Nullwert und Grundelemente haben Standardwerte (zB 0, false usw.)
Sie sollten also wie folgt initialisieren:
statisch int x [] = neu int [20];
//at the time of declaration of x
oder
static int x []; x = neuer int [20];//after declaring x[] and before using x[] in your code
ArrayIndexOutOfBoundException tritt auf, wenn das Array initialisiert und mit einem zugegriffen wird illegaler Index.
z. B .:
x enthält 20 Elemente, daher sind die Indexnummern 0 bis 19 gültig. Wenn wir mitindex < 0
oder mit%index > 19
arbeiten, wird ArrayIndexOutOfBoundException ausgelöst.
Das NullPointerException
wird in static block
verworfen, wo Sie dem ersten Element des Arrays ( x) den Wert 1 zuweisen möchten [0] = 1 ). Beachten Sie, dass das Array int [] mit dem Namen x immer noch nicht instanziiert ist.
Es gibt zwei Möglichkeiten, wie Sie das Problem beheben können.
1 Benutze static int x[] = new int[5];
anstelle von static int x[] ;
2
Ändern
%Vor%An
%Vor% Denken Sie daran: Initialize the array before you use it.
Sie haben Ihr x
-Array nicht initialisiert. Es gibt einen Unterschied zwischen Deklaration und Initialisierung von Variablen. Wenn Sie int x[];
schreiben, deklarieren Sie einfach eine Variable, die als Instanzfeld mit einem Standardwert von null
initialisiert wird. Um ein Array zu erstellen, müssen Sie int x[] = new int[10];
oder die benötigte Größe schreiben.
Der Grund dafür, dass NullPointerException
anstelle von ArrayIndexOutOfBounds
aufgerufen wird, ist, dass letzterer geworfen wird, wenn Sie ein Array haben und versuchen, eine Position außerhalb seiner Grenzen zu adressieren, aber in Ihrem Fall haben Sie kein Array überhaupt und versuchen, etwas in eine nicht-extingente Array zu setzen. Deshalb ein NPE
Ergebnisse in NullPointerException, weil Ihr x-Array nicht initialisiert (ist null)
ArrayIndexOutOfBoundException würde passieren, wenn Sie auf einen Index zugreifen, der außerhalb der Grenzen liegt:
%Vor% Es ist einfach. Hier ist x null
und Sie versuchen, einen Wert in nicht initialisierter array
.Hence NullPointerException
NullPointerException: Diese Ausnahme wird ausgelöst, wenn Sie versuchen, auf die Eigenschaften eines nicht initialisierten Objekts zuzugreifen
ArrayIndexOutOfBoundsException: Diese Ausnahme wird ausgelöst, wenn das Array mit einem Objekt initialisiert wird, aber Sie versuchen, auf das Array mit ungültigem Index zuzugreifen.
In Ihrem Fall erhalten Sie NullPointerException, da Sie Ihr Objekt nicht initialisiert haben. Sie haben eine Person namens "x" erstellt, der jedoch kein Mensch (Array-Objekt) zugeordnet ist.
Wenn Sie Zeile 2 in
ändern %Vor%Dann erhalten Sie ArrayIndexOutOfBoundsException anstelle von NullPointerException.
ExceptionInInitializerError ist eine ungeprüfte Ausnahme.
Bei der Ausführung des statischen Blocks, der Initialisierung statischer Variablen, kommt es bei Ausnahme zu ExceptionInInitializerError.
Beispiel:
%Vor%Ausgabe:
%Vor%Beispiel:
%Vor%Ausgabe:
%Vor%Tags und Links java nullpointerexception exception