153 votes

Quel est le sens de « this » en Java ?

Normalement, j’utilise dans les constructeurs seulement. Je comprends qu’il utiliser pour identifier la variable de paramètre (en utilisant ), s’il a un homonyme avec une variable globale.

Cependant, je ne sais pas qui ce que le vrai sens du est en Java et quelle sera arriver si j’utilise sans point ( `` ).

165voto

Joachim Sauer Points 133411

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

Chaque non-statique méthode 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
  }
}

Puis en appelant frobnicate() sur new MyThisTest() sera imprimée

1
42
MyThisTest a=42

Donc, effectivement, vous l'utiliser pour plusieurs choses:

  • préciser que vous parlez d'un champ, quand il y a aussi quelque chose d'autre avec le même nom qu'un champ
  • référence à l'objet courant comme un ensemble de
  • appeler d'autres constructeurs de la classe en cours dans votre constructeur

54voto

MicSim Points 12980

Ce qui suit est un copier-coller à partir d' ici, mais il explique très bien toutes les différentes utilisations de l' this mot-clé:

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

Voici les différentes manières d'utiliser cette:

  1. Pour désigner spécifiquement que la variable d'instance est utilisé à la place de la statique ou variable locale. Qui est,

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

    Ici, cela fait référence à la variable d'instance. Ici, la priorité est haute pour la variable locale. Par conséquent, l'absence de l' this désigne la variable locale. Si la variable locale qui est le paramètre de nom n'est pas même comme variable d'instance, puis, indépendamment de la this est utilisé ou non il 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 transmettre le courant java instance en tant que paramètre

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

    CurrentClassName startMethod() {
         return this;
    }
    

    Remarque: Ceci peut conduire à des résultats indésirables, utilisé dans les classes internes dans les deux points précédents. Puisque, reportez-vous à l'intérieur de la classe, et non pas à l'extérieur de l'instance.

  5. This peut être utilisé pour obtenir le descripteur de la classe en cours

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

    Même si 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 exemple et cela ne fonctionne pas dans des méthodes statiques.

47voto

irreputable Points 25577

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

20voto

Jon Freedman Points 4411

Il se réfère à l’instance actuelle d’un objet particulier, alors vous pourriez écrire quelque chose comme

8voto

aioobe Points 158466

Si vous appelez alors se référera à l'intérieur .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X