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
nullist - Zugriff auf ein Element eines Arrays, welches gleich
nullist - Werfen einer
Exception, die gleichnullist
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
nullgesetzt 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
nullzurück. - Ein Objektattribut trägt den identischen Namen wie eine lokale Variable. Beim Zugriff wird versehentlich auf die lokale Variable (welche noch
nullist) 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”