2013-05-01 2 views
14

Können Sie mir bitte mit unten Code helfen. Der Fehler ist: „Das ist nicht in einem statischen Kontext verwenden kann“this: Kann das nicht im statischen Kontext verwenden

public class Sample2 { 
    /** 
    * @param args 
    */ 
    public static void main(String[] args) 
    { 
     Sample2 sam=new Sample2(); 

     //Below code works fine 
     System.out.println(sam); 

     //Below code is displaying error 
     System.out.println(this); 
    } 
} 
+0

mögliches Duplikat von [nicht statische Variable kann nicht aus einem statischen Kontext referenziert werden] (http://stackoverflow.com/questions/2559527/non-static-variable-cannot-be-referenced-from-a-static- Kontext) –

+0

mögliches Duplikat von [Warum können wir dieses Schlüsselwort nicht in einer statischen Methode verwenden] (http://stackoverflow.com/questions/11664522/why-cant-we-use-this-keyword-in-a-static) -method) – fglez

+0

Dies könnte helfen - http://www.buggybread.com/2014/06/error-cannot-use-this-in-static-context.html –

Antwort

21

See, „this“ Schlüsselwort bezieht sich auf aktuelle Objekt aufgrund welchem ​​Verfahren unter exceution ist. As, Sie können nicht statische Methode mit Instanz der Klasse aufrufen. Aus diesem Grund kann "this" im obigen Beispiel nicht in einer statischen Methode verwendet werden, da versucht wird, aktuelle Instanzen zu drucken, die gar nicht erstellt wurden. Also, ich denke, das ist der Grund, warum es einen Kompilierzeitfehler gibt, den Sie bekommen.

+2

Tatsächlich können Sie eine statische Methode aufrufen, indem Sie ein Objekt der Klasse verwenden, in der die statische Methode deklariert wurde gibt keinen Fehler, wir machen das nicht, weil es eine sehr schlechte Methode ist, eine statische Methode aufzurufen/zu verwenden :) –

+0

und ich habe es auch für MainActivity.this versucht – Prasad

0

in Java Sie dies nicht in statischen Methoden (statischer Kontext) verwenden können.

Static Methoden zeigen nicht auf eine Instanz der einschließenden Klasse.

Eine statische Methode kann nicht beziehen sich auf „dieses“ oder „super“ keywords in ohnehin

Siehe official docs auf dieses Stichwort

+0

Nicht-statische Methoden zeigen nicht auf Instanzen entweder. – EJP

15

Sie keyword this zum Instanz des verweist Klasse. In einem statischen Kontext haben Sie keine Instanz, daher können Sie nicht darauf verweisen.

Weitere Informationen zu dieser Antwort verweisen: What is the meaning of "this" in Java?

+0

oh okay. Ich nahm an, dass die Objektreferenz von 'sam' in 'this' verfügbar sein würde. Aus der folgenden Antwort wird klar, dass das Schlüsselwort "this" auf das aktuelle Objekt verweist, da die Methode gerade ausgeführt wird. – Cyborgz

1

Wenn wir versuchen, aus einem statischen Kontext darauf zuzugreifen, hat der Compiler nun die Möglichkeit zu erraten, auf welche Instanz Sie sich beziehen. main ist hier eine statische Methode.