CodeGym /Blog Java /Random-FR /Java ce mot clé
Auteur
Jesse Haniel
Lead Software Architect at Tribunal de Justiça da Paraíba

Java ce mot clé

Publié dans le groupe Random-FR
Sur CodeGym, les étudiants sont initiés à Java ce mot-clé littéralement dès les premières leçons. Au fil du temps, sa signification devient claire. Mais avec le recul, beaucoup de gens s'avouent probablement que pendant longtemps ils n'ont pas compris le zen de ce mot-clé. Cet article tirera le rideau sur les secrets du mot-clé this pour ceux qui n'ont pas encore pu le faire... J'ai la référence Java de Schildt , puis à la page 171 vous pouvez voir que le mot-clé this est nécessaire pour qu'une méthode référence l'objet qui l'a appelée. Nous pourrions terminer la leçon avec cela. Mais nous avons besoin de précisions. En règle générale, vous devez l' utiliser dans deux cas :
  1. Lorsqu'une variable d'instance et une variable de méthode/constructeur portent le même nom ;
  2. Lorsque vous devez appeler un type spécifique de constructeur (par exemple, un constructeur par défaut ou un constructeur paramétré) à partir d'un autre type de constructeur. Ceci est également appelé un appel de constructeur explicite.
Et c'est à peu près tout - il n'y a que deux cas où ce mot-clé effrayant est utilisé. Examinons maintenant ces deux cas dans des exemples.

Exemple 1 : Une variable d'instance et une variable de méthode portent le même nom.

Supposons que nous ayons une classe Human qui définit un champ de nom : créons un setter pour la variable name (le setter est entièrement fonctionnel — il n'y a pas de piège ici) :

class Human {
    String name;


    public void setName(String newName) {
        name = newName;
    }
}
Notez que nous passons String newName à la méthode setName setName Nous avons déclaré une nouvelle variable et aurions pu la nommer comme nous le voulions car elle ne sera visible que dans les accolades ({}) qui entourent la méthode setName . Notez que le setter a une seule ligne :

name = newName;
Ici, nous avons introduit une nouvelle variable appelée newName et l'avons affectée à la variable de nom existante de l'objet . De nombreux programmeurs pourraient trouver étrange d'introduire une variable avec un nouveau nom alors que nous parlons finalement de la même chose. C'est-à-dire que nous parlons du champ name dans la classe Human . C'est pourquoi les créateurs de Java ont imaginé un moyen pratique d'utiliser le même nom de variable. En d'autres termes, pourquoi avoir deux noms pour une variable désignant la même chose. En d'autres termes, nous voulons faire quelque chose comme ceci :

class Human {
    String name;


    public void setName(String name) {
        name = name;
    }
}
Mais ici nous rencontrons un problème . Nous avons maintenant deux variables avec le même nom. Un nom String appartient à la classe Human , tandis que l'autre nom String appartient à sa méthode setName . Par conséquent, la JVM ne saurait pas à quelle variable vous faites référence lorsque vous écrivez la ligne suivante dans le setter :

name = name;
Java suppose que vous faites référence à la variable de nom la plus proche , c'est-à-dire celle de la méthode setName : Le mot-clé this (avec exemples) - 3il s'avère donc que vous vous assignez simplement la variable de nom de la méthode. Ce qui bien sûr n'a aucun sens. Par conséquent, le langage avait besoin d'un moyen de distinguer la variable de nom de la classe Human de la variable de nom dans la méthode setName . Ce problème a été résolu en introduisant le mot-clé this , qui dans ce cas indique que vous avez l'intention de référencer la variable associée à une instance de la classe Human , et non la variable dans la méthode : En d'autres termes, thisLe mot-clé this (avec exemples) - 4fait référence à l'objet appelant, comme nous l'avons mentionné au début de l'article. Par conséquent, la méthode setName définit le nom de la personne sur l'objet créé. Vous trouverez ci-dessous le code du programme sans utiliser le mot-clé this . Le code crée un objet Human et lui attribue un nom : Le mot-clé this (avec exemples) - 5Et voici le code avec le mot clé this :

public class Solution {
    public static void main(String[] args) {
        Human human1 = new Human();
        human1.setName("Vinny");
        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 nous permet d'éviter d'introduire de nouvelles variables pour désigner la même chose, ce qui rend le code plus propre et moins encombré de variables supplémentaires.

Exemple 2 : Utilisation de this pour un appel de constructeur explicite

Appeler un constructeur à partir d'un autre peut être utile lorsque vous avez (assez curieusement) plusieurs constructeurs et que vous ne voulez pas que le nouveau constructeur duplique le code d'initialisation précédemment écrit dans un constructeur différent. Confus? Ce n'est pas si effrayant qu'il n'y paraît. Regardez le code ci-dessous. Il a deux constructeurs pour la classe Human :

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) {
        // Call the constructor with two parameters
        this(age, weight);
        // and then initialize the missing variable
        this.height = height;
    }
}
Ici, nous avons d'abord fourni un constructeur avec deux paramètres : int age et int weight . Supposons qu'il comporte deux lignes de code :

this.age = age;
this.weight = weight;
Plus tard, nous décidons d'ajouter un autre constructeur avec trois paramètres, en ajoutant la hauteur aux paramètres d'âge et de poids existants. Vous pourriez écrire le nouveau constructeur comme ceci :

this.age = age;
this.weight = weight;
this.height = height;
Mais au lieu de répéter le code existant dans ce constructeur, vous pouvez utiliser le mot clé this pour appeler explicitement le constructeur avec deux paramètres :

this(age, weight);
// and then initialize the missing variable:
this.height = height;
C'est comme si nous disions au constructeur à trois paramètres :
  • appeler cet autre constructeur qui a deux paramètres
  • puis ajoutez une autre variable.
C'est tout =). Enfin, notons qu'en Java le mot clé this n'est utilisé que dans les méthodes et les constructeurs. Mais ceci est passé implicitement à toutes les méthodes non statiques (c'est pourquoi on l' appelle souvent un paramètre implicite) et peut être utilisé pour faire référence à l'objet qui a appelé la méthode. N'ayez pas peur de ce mot-clé, car ce n'est pas effrayant.
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION