Le mot-clé Java this expliqué : usages pratiques, constructeurs et plus
Le mot-clé Java this expliqué
Cet article explore le mot-clé this en Java, son objectif, les scénarios courants et les bonnes pratiques avec des exemples concrets.
Qu'est-ce que this ?
En Java, le mot-clé this fait référence à l'instance courante d'une classe. Il est le plus souvent utilisé dans les méthodes d'instance ou les constructeurs pour différencier les variables d'instance et les paramètres qui portent le même nom.
class Main { int instVar; Main(int instVar){ this.instVar = instVar; System.out.println("référence this = " + this); } public static void main(String[] args) { Main obj = new Main(8); System.out.println("référence objet = " + obj); } }
Sortie :
référence this = Main@23fc625e référence objet = Main@23fc625e
this et la variable obj pointent vers la même instance d'objet, confirmant que this est simplement une référence à l'objet courant.
Quand utiliser this
Ce mot-clé est précieux dans plusieurs motifs de codage courants :
Résoudre l'ambiguïté des noms de variables
Java permet à un paramètre de partager un nom avec une variable d'instance, mais sans this, le compilateur ne peut pas savoir lequel vous visez. Par exemple :
class MyClass { int age; MyClass(int age){ age = age; } }
Dans le constructeur ci-dessus, age = age assigne le paramètre à lui-même, laissant la variable d'instance inchangée. L'utilisation de this clarifie l'affectation :
class Main { int age; Main(int age){ this.age = age; } public static void main(String[] args) { Main obj = new Main(8); System.out.println("obj.age = " + obj.age); } }
Sortie :
obj.age = 8
Si le nom du paramètre diffère de la variable d'instance, le compilateur utilise implicitement this :
class Main { int age; Main(int i) { age = i; } }
Ceci est équivalent à this.age = i.
Utiliser this dans les getters et setters
Les setters et getters acceptent souvent un paramètre du même nom que le champ. this assure que la bonne variable est ciblée :
class Main { String name; // setter void setName(String name) { this.name = name; } // getter String getName(){ return this.name; } public static void main(String[] args) { Main obj = new Main(); obj.setName("Toshiba"); System.out.println("obj.name: " + obj.getName()); } }
Sortie :
obj.name: Toshiba
- Assigne le paramètre au champ dans le setter.
- Retourne la valeur du champ dans le getter.
Surcharge de constructeurs avec this()
Lorsqu'un constructeur doit déléguer à un autre, this() effectue une invocation explicite de constructeur :
class Complex { private int a, b; private Complex(int i, int j){ this.a = i; this.b = j; } private Complex(int i){ this(i, i); // appelle le constructeur à deux paramètres } private Complex(){ this(0); // appelle le constructeur à un paramètre } @Override public String toString(){ return this.a + " + " + this.b + "i"; } public static void main(String[] args) { Complex c1 = new Complex(2, 3); Complex c2 = new Complex(3); Complex c3 = new Complex(); System.out.println(c1); System.out.println(c2); System.out.println(c3); } }
Sortie :
2 + 3i 3 + 3i 0 + 0i
Points clés :
- Réduit le code dupliqué entre les constructeurs.
- Attention au léger surcoût de performance lors du chaînage des constructeurs.
Note : L'invocation explicite de constructeur via this() doit être la première instruction dans le constructeur.
Passer this comme argument
Puisque this est une référence à l'objet courant, il peut être passé à d'autres méthodes, leur permettant de modifier l'état de l'objet :
class ThisExample { int x; int y; ThisExample(int x, int y) { this.x = x; this.y = y; System.out.println("Avant de passer this à la méthode addTwo() :"); System.out.println("x = " + this.x + ", y = " + this.y); add(this); // passer l'instance courante System.out.println("Après avoir passé this à la méthode addTwo() :"); System.out.println("x = " + this.x + ", y = " + this.y); } void add(ThisExample o){ o.x += 2; o.y += 2; } } class Main { public static void main(String[] args) { new ThisExample(1, -2); } }
Sortie :
Avant de passer this à la méthode addTwo() : x = 1, y = -2 Après avoir passé this à la méthode addTwo() : x = 3, y = 0
Ici, la méthode add reçoit la même instance d'objet et met à jour ses champs directement.
Java
- Maîtriser le mot-clé this en C#
- Maîtriser les opérateurs Java : Types, syntaxe et exemples pratiques
- Commentaires Java : Types, utilisation et bonnes pratiques
- Maîtriser la boucle for améliorée en Java : Syntaxe, exemples et bonnes pratiques
- Maîtriser les constructeurs Java : Types, utilisation et exemples pratiques
- Maîtriser les chaînes de caractères en Java : Création, méthodes et bonnes pratiques
- Le mot-clé Java this expliqué : usages pratiques, constructeurs et plus
- Comprendre le mot-clé final en Java : variables, méthodes et classes
- Maîtriser les interfaces Java : concepts, implémentation et bonnes pratiques