JavaRush /Blog Java /Random-FR /Mot-clé this {dans les exemples}

Mot-clé this {dans les exemples}

Publié dans le groupe Random-FR
Chez JavaRush, les étudiants sont initiés au mot-clé littéralement dès les premiers cours this. Et avec le temps, ce que cela signifie devient clair. Mais beaucoup, avec le recul, se diront probablement honnêtement que pendant longtemps ils n'ont pas pu réaliser le zen de ce mot clé. Dans cet article, nous levons le voile des secrets sur l'utilisation des mots-clés thispour ceux qui n'arrivent toujours pas à les comprendre... Bienvenue ! Si vous prenez le livre de référence Java de Schildt , à la page 171, vous lirez qu'un mot-clé thisest requis pour qu'une méthode puisse référencer l'objet qui l'a appelé. Cela pourrait en fait être la fin. Mais nous avons besoin de détails. Mot-clé this {dans les exemples} - 1En règle générale, thisil doit être utilisé dans deux cas :
  1. Lorsqu'une variable d'instance de classe et une variable de méthode/constructeur ont le même nom ;
  2. Lorsque vous devez appeler un constructeur d'un type (par exemple, un constructeur par défaut ou paramétré) à partir d'un autre. C'est ce qu'on appelle également un appel explicite de constructeur.
C'est tout, pas grand-chose en fait, juste deux cas où ce mot-clé redouté est utilisé. Examinons maintenant ces deux situations avec des exemples.

Premier exemple : la variable d'instance et la variable de méthode ont le même nom

Disons que nous avons une classe Humanpour laquelle le champ "name" est défini : Mot-clé this {dans les exemples} - 2Créons nameun setter pour la variable (le setter fonctionne assez bien et il n'y a pas d'astuce ici) : Veuillez noter que nous passons la variable Mot-clé this {dans les exemples} - 3à la méthode (setter ) . Nous avons introduit une nouvelle variable et (en général) pourrions l'appeler comme nous le voulions car elle ne serait visible qu'entre les {accolades} de la méthode . Notez qu'il y a une ligne dans le setter : setNameString newNamesetName
name = newName;
Autrement dit, nous avons introduit une nouvelle variable newNameet l'avons assignée à une variable déjà existante dans la classe name. De nombreux programmeurs ont trouvé étrange d’introduire une variable avec un nouveau nom si au final nous parlons de la même chose. À propos du nom dans la classe Human. Par conséquent, les développeurs du langage ont pensé à rendre pratique l’utilisation d’un seul nom de variable. En d’autres termes, pourquoi avoir deux noms pour une variable qui signifient la même chose. Autrement dit, j'aimerais faire quelque chose comme ceci : Mot-clé this {dans les exemples} - 4Mais dans ce cas, un problème se pose . Nous avons maintenant deux variables portant le même nom. L'un String nameappartient à la classe Humanet l'autre String nameà sa méthode setName. Par conséquent, la machine Java ne sait pas de quelle variable vous parlez lorsque vous écrivez une chaîne dans un setter :
name = name;
Java prend le plus proche - namede la méthodesetName :
Mot-clé this {dans les exemples} - 5
et il s'avère que vous namelui attribuez simplement une valeur à une variable de cette méthode. Ce qui n’a évidemment aucun sens. Par conséquent, il fallait un moyen de distinguer une variable named'une classe Humand'une variable named'une méthode setName... Pour résoudre ce problème, le mot clé a été introduit this, qui dans ce cas indiquera qu'il est nécessaire d'appeler une variable non pas d'une méthode, mais d'une classe Human:
Mot-clé this {dans les exemples} - 6
Autrement dit, thisil fera référence à l'objet appelant, comme cela a été dit au début de l'article. En conséquence, le nom de la personne setNamesera défini via le setter sur l'objet créé. Vous trouverez ci-dessous le code sans utiliser le mot-clé this. Le code crée un objet classe Humanet lui donne un nom :
Mot-clé this {dans les exemples} - 7
Et ci-dessous le code du programme avec le mot-clé this:
public class Solution{
    public static void main(String[] args) {
        Human human1 = new Human();
        human1.setName("Volodya");
        human1.print();
    }
}
class Human{
    String name;
    public String getName() {
        return name;
    }
    public void setName(String name){
        this.name = name;
    }
    void print(){
        System.out.println(name);
    }
}
Ainsi, cela thisévite d’introduire de nouvelles variables pour désigner la même chose, ce qui rend le code moins « surchargé » avec des variables supplémentaires.

Exemple 2 - Utiliser ceci pour appeler explicitement un constructeur

Appeler un constructeur à partir d'un autre peut être utile lorsque vous avez (assez curieusement) plusieurs constructeurs et que vous ne souhaitez pas réécrire le code d'initialisation donné précédemment dans le constructeur dans un nouveau constructeur. Confus? Tout n'est pas aussi effrayant qu'il y paraît. Regardez le code ci-dessous, il a deux constructeurs de classeHuman :
class Human{
    int age;
    int weight;
    int height;

    Human(int age, int weight){
        this.age = age;
        this.weight = weight;
    }
    Human(int age, int weight, int height){
        //you call the constructor with two parameters
        this(age, weight);
        //and add the missing variable
        this.height = height;
    }
}
Ici, nous avons d'abord un constructeur à deux paramètres qui accepte int ageet int weight. Disons que nous y avons écrit deux lignes de code :
this.age = age;
this.weight = weight;
puis ils ont décidé d'ajouter un autre constructeur, avec trois paramètres, qui, en plus de l'âge et du poids, prend également en compte la taille. Dans le nouveau constructeur, vous pourriez écrire ceci :
this.age = age;
this.weight = weight;
this.height = height;
Mais au lieu de répéter le code que vous avez déjà écrit dans ce constructeur, vous pouvez utiliser un mot-clé pour thisappeler explicitement le constructeur avec deux paramètres :
this(age, weight);
// and add the missing variable:
this.height = height;
Vous dites donc en quelque sorte au constructeur trois paramètres :
  • appelez ce constructeur, qui a deux paramètres.
  • et ajoutez la variable manquante.
C'est tout =). Enfin, notons que le mot-clé this en Java n'est utilisé que dans le cadre des méthodes ou des constructeurs d'une instance de classe. Mais implicitement, le mot-clé thisest transmis à toutes les méthodes sauf les méthodes statiques (d'où la raison pour laquelle il thisest souvent appelé paramètre implicite) et peut être utilisé pour faire référence à l'objet qui a appelé la méthode. Il n'y a pas lieu d'avoir peur de ce mot-clé, car Thisil ne fait pas peur.
Mot-clé this {dans les exemples} - 9
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION