05.03 NullPointerException
Eine NullPointerException
wird immer dann geworfen, wenn null
anstelle einer Instanz eines Objekts verwendet wurde. Dies ist immer dann der Fall, wenn einer Variablen eines Objekts der Wert null
zugewiesen wurde, und auf dieses Objekt entsprechend zugegriffen wird. Siehe Kapitel 04.02 Objekte.
In folgenden Fällen wird eine NullPointerException
geworfen. Beim …
- Aufrufen einer Methode eines
null
-Objekts - Zugriff auf ein Attribut eines
null
-Objekts - Abfragen der Länge eines Arrays, das gleich
null
ist - Zugriff auf ein Element eines Arrays, welches gleich
null
ist - Werfen einer
Exception
, die gleichnull
ist
In folgenden Fällen wird keine NullPointerException
geworfen:
Beim Vergleich mit einem null
-Objekt:
Object obj = new Object(); Object nObj = null; if (nObj == obj) { // ungleich } if (nObj == null) { // nObj gleich null }
Beim Vergleich zweier Objekte mit equals, wenn equals
richtig überschrieben wurde (Siehe Kapitel 04.03.11 Besondere Methoden (equals, hashCode und toString)) und das Objekt, dessen equals
-Methode aufgerufen wird, ungleich null
ist.
Object obj = new Object(); Object nObj = null; if (obj.equals(nObj)) { // gleich }
Wenn ein null
-Objekt von einer Methode zurückgegeben wird.
public Object getObj() { return null; } public Object getObj2() { Object obj = null; return obj; }
Da die RuntimeException
NullPointerException
keine checked Exception ist, kann sie ohne Erweiterung der throws
-Klausel geworfen werden. Der StackTrace einer NullPointerException
(oder Abgekürzt auch NPE) sieht in etwa so aus:
Exception in thread "main" java.lang.NullPointerException
at NPETest.main(NPETest.java:6)
Der Fehler wurde – wie der Fehlermeldung zu entnehmen ist – in Zeile 6 geworfen. Das ist der dazugehörige Code:
public class NPETest { public static void main(String[] args) { Object obj = null; obj.hashCode(); } }
Häufige Fehlerursachen
- Ein Objektattribut wurde bei der Deklaration auf
null
gesetzt und vor dem ersten Zugriff nicht Initialisiert. - Einer Variablen wird durch eine Methode ein Objekt zugewiesen. Leider liefert die Methode (aufgrund einer ungünstigen Konstellation oder eines Fehlers) anstelle eines Objekts
null
zurück. - Ein Objektattribut trägt den identischen Namen wie eine lokale Variable. Beim Zugriff wird versehentlich auf die lokale Variable (welche noch
null
ist) anstelle des Objektattributs zugegriffen.
Fehlerbehebung
Um eine NullPointerException
zu beheben, müssen Sie zuerst herausfinden, welches Objekt gleich null
ist. Anhand der Fehlermeldung können Sie die zugehörige Zeile ausfindig machen. Testen Sie in Ihrem Programm (z. B. mit einem Debugger oder durch die Ausgabe der Variablen auf der Konsole über System.out.println(object);
) welches Objekt null
ist. Als nächstes müssen Sie herausfinden, warum das Objekt null
ist. Gehen Sie hierzu Rückwärts durch Ihren Quellcode, bis sie die Zuweisung von null
zu diesem Objekt gefunden haben. Zum Schluss müssen Sie noch analysieren, warum dem Objekt an dieser Stelle null
zugewiesen, bzw. das Objekt später nicht noch einmal über new
neu instanziiert wurde. Dementsprechend müssen Sie dann reagieren – entweder indem Sie das Objekt neu instanziieren, die Zuweisung von null
unterbinden, hotcasinosonline.net, oder den Fall abfangen, falls das Objekt gleich null
ist.
One Reply to “05.03 NullPointerException”