2013-05-01 12 views
14

Potete aiutarmi per favore con il codice qui sotto. L'errore è: "non può essere utilizzata in un contesto statico"questo: Impossibile usare questo in contesto statico

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

possibile duplicato di [variabile non statica non può essere referenziata da un contesto statico] (http://stackoverflow.com/questions/2559527/non-static-variable-cannot-be-referenced-from-a-static- contesto) –

+0

possibile duplicato di [perché non possiamo usare questa parola chiave in un metodo statico] (http://stackoverflow.com/questions/11664522/why-cant-we-use-this-keyword-in-a-static -metodo) – fglez

+0

Questo potrebbe aiutare - http://www.buggybread.com/2014/06/error-cannot-use-this-in-static-context.html –

risposta

21

Sede "questa" parola si riferisce ad oggetto corrente dovuta alla quale metodo è sotto exceution. Come, non puoi chiamare il metodo statico usando l'istanza della classe. Questo è il motivo per cui "questo" non può essere utilizzato nell'esempio precedente in un metodo statico poiché sta tentando di stampare un'istanza corrente che non è stata creata affatto. Quindi, penso che questo sia il motivo per cui c'è un errore in fase di compilazione che stai ottenendo.

+2

In realtà, è possibile chiamare un metodo statico utilizzando un oggetto della classe in cui è stato dichiarato il metodo statico. non daremo errori, non lo facciamo perché è un modo molto cattivo di chiamare/usare un metodo statico. :) –

+0

e ho anche provato per MainActivity.this – Prasad

0

in Java non è possibile utilizzare questo nei metodi statici (contesto statico).

Static i metodi non puntano a nessuna istanza della classe di chiusura.

Un metodo statico non può fare riferimento a “questo” o le parole chiave “super” in ogni caso

Fare riferimento official docs su questo parola chiave

+0

I metodi non statici non "puntano a" istanze o. – EJP

15

Essi parole chiave dalle this si riferisce alla istanza del classe. In un contesto statico, non hai istanze, quindi non puoi segnalarlo.

Per ulteriori informazioni, fare riferimento a questa risposta: What is the meaning of "this" in Java?

+0

oh okay. Ho assunto che il riferimento all'oggetto di 'sam' sarebbe disponibile in 'this'. dalla seguente risposta, è chiaro che la parola chiave "this" si riferisce all'oggetto corrente a causa del metodo in esecuzione " – Cyborgz

1

Se proviamo ad accedere a questo da un contesto statico, il compilatore ha ora modo di indovinare quale istanza, ci si riferisce anche. main è un metodo statico qui.

Problemi correlati