web-dev-qa-db-fra.com

this: Impossible d'utiliser ceci dans un contexte statique

Pouvez-vous m'aider s'il vous plaît avec le code ci-dessous. L'erreur est la suivante: "Impossible d'utiliser ceci dans un contexte statique"

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);
    }
}
16
Cyborgz

Voir, le mot-clé "this" fait référence à l'objet actuel pour lequel la méthode est sous exceution. En tant que, vous ne pouvez pas appeler une méthode statique en utilisant une instance de classe. C'est pourquoi, "ceci" ne peut pas être utilisé dans l'exemple ci-dessus dans une méthode statique, car elle tente d'imprimer une instance actuelle qui n'est pas créée du tout. Donc, je pense que c’est la raison pour laquelle il ya une erreur de compilation.

26

Le mot clé this fait référence au instance de la classe. Dans un contexte statique, vous n'avez pas d'instance, vous ne pouvez donc pas vous y référer.

Pour plus d'informations, reportez-vous à cette réponse: Que signifie "ceci" en Java?

17
Matten

En Java, vous ne pouvez pas utiliser cela dans des méthodes statiques (contexte statique).

Les méthodes Static ne pointent sur aucune instance de la classe englobante.

Une méthode statique ne peut en aucun cas faire référence à «ceci» ou à des «super» mots clés.

Référez-vous au mot clé official docs on this.

2
Suresh Atta

Si nous essayons d'accéder à cela depuis un contexte statique, le compilateur n'a aucun moyen de deviner quelle instance, vous faites aussi référence. main est une méthode statique ici.

2
Vivek Vermani

écrire cela signifie que, dans un contexte statique, nous attendons le retour de l'adresse de l'objet. Bien qu'il soit totalement légal d'avoir un objet appelant des méthodes statiques, ce n'est pas une obligation. Donc, le compilateur arrête toute possibilité d'erreur si l'objet n'est pas créé pour la classe. 

0
Jain