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 gleich null 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

  1. Ein Objektattribut wurde bei der Deklaration auf null gesetzt und vor dem ersten Zugriff nicht Initialisiert.
  2. 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.
  3. 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”

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.