2010-09-16 17 views
96

Normalement, j'utilise this dans les constructeurs seulement. Je comprends qu'il est utilisé pour identifier la variable de paramètre (en utilisant this.something), s'il a un même nom avec une variable globale.Quelle est la signification de "ceci" en Java?

Cependant, je ne sais pas ce que la vraie signification de this est en Java et ce qui se passera si j'utilise this sans point (.).

+6

Aux répondeurs: http://meta.stackexchange.com/questions/15775/do-you-delete-your-own-answer-when-its-a-dupliquer – BalusC

+1

Yakshemash! Alors, amis. Vous pouvez également faire référence à ma question ici - https://stackoverflow.com/questions/23334336/this-in-java-exception-in-thread-main-java-lang-stackoverflowerror Chenqui. –

Répondre

12

Il fait référence à l'instance actuelle d'un objet particulier, vous pouvez donc écrire quelque chose comme

public Object getMe() { 
    return this; 
} 
+4

Veillez à utiliser le style approprié lorsque vous l'appelez: o.getMe(). GetMe(). OutOfHere() –

3

Il est « une référence à l'objet dans le contexte actuel » efficace. Par exemple, pour imprimer « cet objet », vous pourriez écrire:

System.out.println(this); 

Notez que votre utilisation de « variable globale » est un peu hors ... si vous utilisez this.variableName par définition, il est pas une variable globale - c'est une variable spécifique à cette instance particulière.

2

ceci peut être utilisé à l'intérieur d'une méthode ou d'un constructeur.

Renvoie la référence à l'objet actuel.

4

Il fait référence à l'instance sur laquelle la méthode est appelée

class A { 

    public boolean is(Object o) { 
    return o == this; 
    } 

} 

A someA = new A(); 
A anotherA = new A(); 
someA.is(someA); // returns true 
someA.is(anotherA); // returns false 
133

this fait référence à l'objet courant.

Chaque méthode non statique s'exécute dans le contexte d'un objet. Donc, si vous avez une classe comme ceci:

public class MyThisTest { 
    private int a; 

    public MyThisTest() { 
    this(42); // calls the other constructor 
    } 

    public MyThisTest(int a) { 
    this.a = a; // assigns the value of the parameter a to the field of the same name 
    } 

    public void frobnicate() { 
    int a = 1; 

    System.out.println(a); // refers to the local variable a 
    System.out.println(this.a); // refers to the field a 
    System.out.println(this); // refers to this entire object 
    } 

    public String toString() { 
    return "MyThisTest a=" + a; // refers to the field a 
    } 
} 

ensuite appeler frobnicate() sur new MyThisTest() imprimera

 
1 
42 
MyThisTest a=42 

donc efficacement vous l'utilisez pour plusieurs choses:

  • préciser que vous parlez à propos d'un champ, quand il y a aussi quelque chose d'autre avec le même nom qu'un champ
  • se réfèrent à l'obj actuel ect dans son ensemble
  • invoquer d'autres constructeurs de la classe actuelle dans votre constructeur
+0

Cela ne fonctionne pas. J'obtiens une erreur en disant qu'une méthode 'main' est requise. Si j'ajoute la méthode principale, alors je dois appeler à partir de là. Et toute tentative d'appel de frobnicate() à l'intérieur de main indique que vous ne pouvez pas appeler une référence non-statique depuis l'intérieur d'une référence statique. Et la suppression de static de 'main' renvoie à nouveau l'erreur qu'aucune méthode principale n'est trouvée. S'il vous plaît, expliquez. – dbconfession

+4

@dbconfession: le code ici n'est pas conçu comme un programme autonome et autonome. Vous êtes censé * lire * le * code * ** et ** le texte, pas le lancer! C'est un code valide, mais il est uniquement destiné à des fins de démonstration (c'est pourquoi il n'a pas de main propre). Pour obtenir de l'aide sur la méthode principale, veuillez consulter http://stackoverflow.com/questions/146576/why-is-the-java-main-method-static. –

+0

@Joachim Merci! Il me manque quelque chose de fondamental sur ce que cela signifie de rendre une méthode statique et comment cela fonctionne. Ma compréhension est que ceci vous permet d'appeler une méthode ou une variable unique à la version instanciée de la classe, ce qui permet d'avoir une autre version de la méthode ou de la variable qui est appelée sans invoquer 'this '. appelé 'Test.class' J'ai deux méthodes:' static public void main() 'et' public Test() 'Je ne peux pas passer d'informations entre les méthodes car' main' est statique et les constructeurs ne peuvent pas être rendus statiques. Devrais-je poster une nouvelle question? – dbconfession

7

Swing son assez commun d'écrire une classe qui implémente ActionListener et ajoutez l'instance en cours (par exemple « ceci ») en tant que ActionListener pour Composants.

public class MyDialog extends JDialog implements ActionListener 
{ 
    public MyDialog() 
    { 
     JButton myButton = new JButton("Hello"); 
     myButton.addActionListener(this); 
    } 

    public void actionPerformed(ActionEvent evt) 
    { 
     System.out.println("Hurdy Gurdy!"); 
    } 

} 
47

Ce qui suit est une pâte de copie & de here, mais explique très bien les différentes utilisations du mot-clé this:

Définition: mot-clé Java this est utilisé pour désigner l'instance actuelle de la méthode sur dont il est utilisé.

Voici les nouveaux moyens d'utiliser ceci:

  1. pour indiquer expressément que la variable d'instance est utilisée à la place de la variable statique ou locale. C'est-à-dire

    private String javaFAQ; 
    void methodName(String javaFAQ) { 
        this.javaFAQ = javaFAQ; 
    } 
    

    Ici, cela fait référence à la variable d'instance. Ici, la priorité est élevée pour la variable locale. Par conséquent, l'absence du this désigne la variable locale. Si la variable locale qui est le nom de paramètre n'est pas identique variable d'instance alors quel que soit this est utilisé ou non désigne la variable d'instance.

  2. This est utilisé pour désigner les constructeurs

    public JavaQuestions(String javapapers) { 
        this(javapapers, true); 
    } 
    

    Cela appelle le constructeur de la même classe java qui a deux paramètres.

  3. This est utilisé pour passer l'instance de java en tant que paramètre

    obj.itIsMe(this); 
    
  4. Comme ci-dessus cela peut aussi être utilisé pour renvoyer l'instance en cours

    CurrentClassName startMethod() { 
        return this; 
    } 
    

    Note: Cela peut conduire à des résultats indésirables lors de l'utilisation dans les classes internes dans les deux points ci-dessus. Puisque cela se référera à la classe interne et non à l'instance externe.

  5. This peut être utilisé pour obtenir la poignée de la classe actuelle

    Class className = this.getClass(); // this methodology is preferable in java 
    

    Bien que cela peut être fait par

    Class className = ABC.class; // here ABC refers to the class name and you need to know that! 
    

Comme toujours, this est associé à son instance et Cela ne fonctionnera pas dans les méthodes statiques.

+2

Je souhaite que je pourrais upvote 10 fois, surtout pour le 1er et le 5ème point. Je luttais pour comprendre la signification de 'ceci' pendant presque une heure jusqu'à ce que je trouve ceci. Juste exquis! –

6

Si vous appelez myObject.method() alors this se référera à myObject à l'intérieur method.

35

Pour être complet, this peut également être utilisé pour faire référence à l'objet externe

class Outer { 
    class Inner { 
     void foo() { 
      Outer o = Outer.this; 
    } 
    } 
} 
+0

'c'est' ce que je cherchais! ;) – forresthopkinsa

3

objets ont des méthodes et des attributs (variables) qui sont dérivées des classes, afin de préciser les méthodes et les variables appartiennent à un objet particulier le mot réservé this est utilisé.Dans le cas des variables d'instance, il est important de comprendre la différence entre les paramètres implicites et explicites. Jetez un oeil à l'appel fillTank pour l'objet audi.

Car audi= new Car(); 

audi.fillTank(5); // 5 is the explicit parameter and the car object is the implicit parameter 

La valeur entre parenthèses est le paramètre implicite et l'objet lui-même est le paramètre explicite, les méthodes qui ne sont pas des paramètres explicites, utilisent des paramètres implicites, le procédé fillTank possède à la fois explicite et un paramètre implicite.

permet de jeter un coup d'oeil de plus près la méthode fillTank dans la classe Car

public class Car() 
{ 
    private double tank; 

    public Car() 
    { 
     tank = 0; 
    } 

    public void fillTank(double gallons) 
    { 
     tank = tank + gallons; 
    } 

} 

Dans cette classe, nous avons une variable d'instance « réservoir ». Il peut y avoir beaucoup d'objets qui utilisent la variable d'instance de tank, afin de spécifier que la variable d'instance "tank" est utilisée pour un objet particulier, dans notre cas l'objet "audi" que nous avons construit précédemment, nous utilisons le mot-clé réservé this. pour les variables d'instance l'utilisation de 'this' dans une méthode indique que la variable d'instance, dans notre cas "tank", est une variable d'instance du paramètre implicite.

Le compilateur java ajoute automatiquement le mot réservé this de sorte que vous n'avez pas à ajouter, il est une question de préférence. Vous ne pouvez pas utiliser this sans un point (.) Car ce sont les règles de java (la syntaxe).

En résumé.

  • objets sont définis par des classes et disposer de méthodes et variables
  • L'utilisation de this sur une variables exemple dans un procédé indique que la variable d'instance appartient au paramètre implicite, ou qu'il est une variable d'instance du paramètre implicite.
  • Le paramètre implicite est l'objet dont la méthode est appelée dans ce cas "audi".
  • Le compilateur java ajoute automatiquement le ce mot réservé, ajoutant qu'il est une question de préférence
  • this ne peut pas être utilisé sans un point (.) C'est syntaxiquement invalide
  • this peut également être utilisé pour distinguer entre les variables locales et les variables globales qui ont le même nom
  • le mot de réserve this s'applique également aux méthodes, pour indiquer qu'une méthode appartient à un objet particulier.
2

Le ce les mots-clés est utilisé pour désigner la variable courante d'un bloc, par exemple considérer le code ci-dessous (Juste un exampple, donc ne vous attendez pas à la norme du code Java):

Public class test{ 

test(int a) { 
this.a=a; 
} 

Void print(){ 
System.out.println(a); 
} 

    Public static void main(String args[]){ 
    test s=new test(2); 
    s.print(); 
} 
} 

Cest il. la sortie sera "2". Si nous n'utilisé le mot-clé ce, la sortie sera: 0

0

Je cherchais aussi pour la même réponse, et en quelque sorte ne pouvait pas comprendre clairement le concept.Mais finalement, j'ai compris à partir de ce link

c'est un mot-clé en Java. Ce qui peut être utilisé à l'intérieur de la méthode ou du constructeur de la classe. Il (cela) fonctionne comme une référence à un objet courant dont la méthode ou le constructeur est appelé. ce mot-clé peut être utilisé pour référencer n'importe quel membre de l'objet courant depuis une méthode d'instance ou un constructeur.

Vérifiez les exemples du link pour une compréhension claire

1

Si les variables d'instance sont les mêmes que les variables qui sont déclarées dans le constructeur, nous utilisons « ce » pour affecter des données.

class Example{ 
    int assign;// instance variable 

    Example(int assign){ // variable inside constructor 
      this.assign=assign; 
    } 
} 

Espérons que cela aide.

0

En Java "this" est une variable prédéfinie. Si nous utilisons "this" dans la méthode mean, nous obtenons la référence (adresse) de l'objet en cours d'exécution. À titre d'exemple.

this.age ---> âge de l'objet en cours d'exécution.

Questions connexes