java.lang.ExceptionInInitializerError Verursacht von: java.lang.NullPointerException

7

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 .

    
Prashant Shilimkar 09.12.2013, 09:12
quelle

8 Antworten

11
  

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:

  • Aufruf der Instanzmethode eines Null-Objekts.
  • Auf das Feld eines Nullobjekts zugreifen oder dieses ändern.
  • Die Länge von null als wäre es ein Array.
  • Auf die Slots von null zugreifen oder sie ändern, als wäre es ein Array.
  • Nullen wird geworfen, als wäre es ein Throwable-Wert.

Sie treffen den fetteren Punkt, da das Array null ist.

    
ꜱᴜʀᴇꜱʜ ᴀᴛᴛᴀ 09.12.2013, 09:12
quelle
3

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 mit index < 0 oder mit% index > 19 arbeiten, wird ArrayIndexOutOfBoundException ausgelöst.

    
Infinite Recursion 09.12.2013 09:24
quelle
2

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.

%Vor%

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.

    
MouseLearnJava 09.12.2013 09:20
quelle
1

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

    
svz 09.12.2013 09:12
quelle
1
%Vor%

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%     
Melquiades 09.12.2013 09:21
quelle
1

Es ist einfach. Hier ist x null und Sie versuchen, einen Wert in nicht initialisierter array .Hence NullPointerException

zu speichern     
user3099347 13.12.2013 12:28
quelle
0

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.

    
Sathesh 21.06.2014 03:26
quelle
0

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%     
Raman Gupta 02.10.2017 10:40
quelle