376 Stimmen

Was ist der Grund dafür, dass eine nichtstatische Methode nicht aus einem statischen Kontext heraus referenziert werden kann?

Der häufigste Anfängerfehler besteht darin, dass Sie versuchen, eine Klasseneigenschaft "statisch" zu verwenden, ohne eine Instanz dieser Klasse zu erstellen. Sie erhalten dann die erwähnte Fehlermeldung:

Sie können entweder die nicht statische Methode statisch machen oder eine Instanz dieser Klasse erstellen, um ihre Eigenschaften zu verwenden.

Was ist der Grund dafür? Mir geht es nicht um die Lösung, sondern um den Grund.

private java.util.List<String> someMethod(){
    /* Some Code */
    return someList;            
}

public static void main(String[] strArgs){          
     // The following statement causes the error. 
    java.util.List<String> someList = someMethod();         
}

9voto

Ande Turner Punkte 6828

In den bisherigen Antworten wurde beschrieben, warum das so ist, aber hier ist noch etwas, das Sie vielleicht in Betracht ziehen sollten:

Sie können eine Methode von einer instanzierbaren Klasse aufrufen, indem Sie einen Methodenaufruf an ihren Konstruktor anhängen,

Object instance = new Constuctor().methodCall();

o

primitive name = new Constuctor().methodCall();

Dies ist nützlich, wenn Sie eine Methode einer instanzierbaren Klasse nur einmal innerhalb eines einzigen Bereichs verwenden möchten. Wenn Sie mehrere Methoden einer instanzierbaren Klasse innerhalb eines einzigen Bereichs aufrufen, sollten Sie auf jeden Fall eine referenzierbare Instanz erstellen.

3voto

Robin Punkte 23622

Eine statische Methode bezieht eine Aktion auf einen Objekttyp, während die nicht statische Methode eine Aktion auf eine Instanz dieses Objekttyps bezieht. In der Regel handelt es sich um eine Methode, die etwas in Bezug auf die Instanz tut.

Ex:

Die Klasse Car könnte eine Wash-Methode haben, die das Waschen eines bestimmten Autos anzeigt, während eine statische Methode für den Typ Car gelten würde.

3voto

Charles Bretana Punkte 137391

Wenn eine Methode nicht statisch ist, "sagt" dies dem Compiler, dass die Methode Zugriff auf Daten auf Instanzebene in der Klasse benötigt (wie ein nicht-statisches Feld). Diese Daten sind erst dann verfügbar, wenn eine Instanz der Klasse erstellt wurde. Der Compiler gibt also einen Fehler aus, wenn Sie versuchen, die Methode von einer statischen Methode aus aufzurufen. Wenn die Methode tatsächlich KEIN nicht-statisches Mitglied der Klasse referenziert, machen Sie die Methode statisch.

In Resharper z.B. wird beim Erstellen einer nicht-statischen Methode, die KEIN statisches Mitglied der Klasse referenziert, eine Warnmeldung "Diese Methode kann statisch gemacht werden" ausgegeben.

3voto

Der Compiler fügt den nicht-statischen Methoden ein Argument hinzu. Er fügt ein this pointer/reference. This is also the reason why a static method can not use this denn es gibt kein Objekt.

2voto

S

W''''

S

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