11 Stimmen

Wie kann ich eine Methode für ein Null-Objekt aufrufen?

public class JavaPuzzler {

    public static void main(String[] args) {
    JavaPuzzler javaPuzzler = null;
    System.out.println(javaPuzzler.get());
    }

    private static String get(){
        return "i am a java puzzler";
    }
}

Man könnte meinen, dass es eine NullPointerException auslösen sollte, weil die Hauptmethode die get()-Methode auf lokale Variable, die initialisiert wird auf null und man kann keine Methode auf null aufrufen.

Aber wenn du dieses Programm ausführst, wirst du sehen, dass es "i am a java puzzler" ausgibt.

Kann mir jemand die Antwort geben? Vielen Dank im Voraus.

8voto

Anthony Pegram Punkte 119149

In Ihrem Codebeispiel, get() ist eine statisches Mitglied die zur Klasse gehört, nicht zu einer Instanz. Sie benötigen keine Instanz, um die Methode aufzurufen.

public static String get() // belongs globally to class, no instance required
public String get() // belongs to instance

4voto

Paul Punkte 19008

Das liegt daran, dass die Methode statisch ist, und obwohl Sie auf eine Instanz verweisen, ist die Instanz nicht notwendig. Die Java Sprachspezifikation erklärt, warum Abschnitt 8.4.3.2 :

Eine Methode, die als statisch deklariert wird, nennt man eine Klassenmethode. Eine Klassen Methode wird immer ohne Bezug auf ein bestimmtes Objekt aufgerufen.

Dies bedeutet, dass es keine Rolle spielt, ob javaPuzzler Instanz ist null - die Methode "gehört" zur Klasse, nicht zu einer Instanz.

3voto

ibid Punkte 3811

En get Methode ist statisch, was bedeutet, dass der eigentliche Verweis in javaPuzzler wird bei diesem Aufruf ignoriert, es wird nur der Typ der Variablen verwendet.

1voto

Vicky Punkte 15549

Ihre Methode ist statisch. Sie kann also nur auf statische Weise aufgerufen werden.

Also auch wenn Sie es als javaPuzzler.get() setzen, wird der tatsächliche Aufruf JavaPuzzler.get() und damit der Druck sein!!!

1voto

CloudyMarble Punkte 36010

Sie rufen eine statische Methode auf, Sie brauchen keine Instanz, um sie aufzurufen, deshalb funktioniert sie.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X