Dans cet article, nous en apprendrons davantage sur ce mot-clé en Java, comment et où les utiliser à l'aide d'exemples.
ce mot-clé
En Java, ce mot-clé est utilisé pour faire référence à l'objet courant à l'intérieur d'une méthode ou d'un constructeur. Par exemple,
class Main ( int instVar; Main(int instVar)( this.instVar = instVar; System.out.println("this reference = " + this); ) public static void main(String() args) ( Main obj = new Main(8); System.out.println("object reference = " + obj); ) )
Sortie :
this reference = Référence d'objet Main @ 23fc625e = Main @ 23fc625e
Dans l'exemple ci-dessus, nous avons créé un objet nommé obj de la classe Main. Nous imprimons ensuite la référence à l'objet obj et au this
mot - clé de la classe.
Ici, nous pouvons voir que la référence des deux obj et this
est la même. Cela signifie que ce n'est rien d'autre que la référence à l'objet actuel.
Utilisation de ce mot-clé
Il existe diverses situations où le this
mot-clé est couramment utilisé.
Utilisation de ceci pour les noms de variables d'ambiguïté
En Java, il n'est pas permis de déclarer deux ou plusieurs variables ayant le même nom dans une portée (portée de classe ou portée de méthode). Cependant, les variables d'instance et les paramètres peuvent avoir le même nom. Par exemple,
class MyClass ( // instance variable int age; // parameter MyClass(int age)( age = age; ) )
Dans le programme ci-dessus, la variable d'instance et le paramètre ont le même nom: age. Ici, le compilateur Java est confus en raison de l'ambiguïté du nom.
Dans une telle situation, nous utilisons ce mot-clé. Par exemple,
Voyons d'abord un exemple sans utiliser de this
mot clé:
class Main ( int age; Main(int age)( age = age; ) public static void main(String() args) ( Main obj = new Main(8); System.out.println("obj.age = " + obj.age); ) )
Sortie :
mc.age = 0
Dans l'exemple ci-dessus, nous avons passé 8
une valeur au constructeur. Cependant, nous obtenons 0
en sortie. Cela est dû au fait que le compilateur Java est confus en raison de l'ambiguïté des noms entre l'instance de la variable et le paramètre.
Maintenant, réécrivons le code ci-dessus en utilisant le this
mot-clé.
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
Maintenant, nous obtenons le résultat attendu. C'est parce que lorsque le constructeur est appelé, this
à l'intérieur du constructeur est remplacé par l'objet obj qui a appelé le constructeur. Par conséquent, la variable d'âge reçoit la valeur 8.
De plus, si le nom du paramètre et de la variable d'instance est différent, le compilateur ajoute automatiquement ce mot-clé. Par exemple, le code:
class Main ( int age; Main(int i) ( age = i; ) )
est équivalent à:
class Main ( int age; Main(int i) ( this.age = i; ) )
ceci avec Getters et Setters
Une autre utilisation courante du this
mot-clé est dans les méthodes setters et getters d'une classe. Par exemple:
class Main ( String name; // setter method void setName( String name ) ( this.name = name; ) // getter method String getName()( return this.name; ) public static void main( String() args ) ( Main obj = new Main(); // calling the setter and the getter method obj.setName("Toshiba"); System.out.println("obj.name: "+obj.getName()); ) )
Sortie :
obj.name: Toshiba
Ici, nous avons utilisé le this
mot-clé:
- pour attribuer une valeur à l'intérieur de la méthode setter
- pour accéder à la valeur dans la méthode getter
Utilisation de ceci dans la surcharge du constructeur
Tout en travaillant avec la surcharge de constructeur, nous pourrions avoir à appeler un constructeur d'un autre constructeur. Dans un tel cas, nous ne pouvons pas appeler le constructeur explicitement. Au lieu de cela, nous devons utiliser un this
mot-clé.
Ici, nous utilisons une forme différente de ce mot-clé. C'est this()
. Prenons un exemple,
class Complex ( private int a, b; // constructor with 2 parameters private Complex( int i, int j )( this.a = i; this.b = j; ) // constructor with single parameter private Complex(int i)( // invokes the constructor with 2 parameters this(i, i); ) // constructor with no parameter private Complex()( // invokes the constructor with single parameter this(0); ) @Override public String toString()( return this.a + " + " + this.b + "i"; ) public static void main( String() args ) ( // creating object of Complex class // calls the constructor with 2 parameters Complex c1 = new Complex(2, 3); // calls the constructor with a single parameter Complex c2 = new Complex(3); // calls the constructor with no parameters Complex c3 = new Complex(); // print objects System.out.println(c1); System.out.println(c2); System.out.println(c3); ) )
Sortie :
2 + 3i 3 + 3i 0 + 0i
Dans l'exemple ci-dessus, nous avons utilisé le this
mot-clé,
- pour appeler le constructeur
Complex(int i, int j)
depuis le constructeurComplex(int i)
- pour appeler le constructeur
Complex(int i)
depuis le constructeurComplex()
Remarquez la ligne,
System.out.println(c1);
Here, when we print the object c1, the object is converted into a string. In this process, the toString()
is called. Since we override the toString()
method inside our class, we get the output according to that method.
One of the huge advantages of this()
is to reduce the amount of duplicate code. However, we should be always careful while using this()
.
This is because calling constructor from another constructor adds overhead and it is a slow process. Another huge advantage of using this()
is to reduce the amount of duplicate code.
Note: Invoking one constructor from another constructor is called explicit constructor invocation.
Passing this as an Argument
We can use this
keyword to pass the current object as an argument to a method. For example,
class ThisExample ( // declare variables int x; int y; ThisExample(int x, int y) ( // assign values of variables inside constructor this.x = x; this.y = y; // value of x and y before calling add() System.out.println("Before passing this to addTwo() method:"); System.out.println("x = " + this.x + ", y = " + this.y); // call the add() method passing this as argument add(this); // value of x and y after calling add() System.out.println("After passing this to addTwo() method:"); 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 ) ( ThisExample obj = new ThisExample(1, -2); ) )
Sortie :
Avant de passer ceci à la méthode addTwo (): x = 1, y = -2 Après avoir passé ceci à la méthode addTwo (): x = 3, y = 0
Dans l'exemple ci-dessus, à l'intérieur du constructeur ThisExample()
, notez la ligne,
add(this);
Ici, nous appelons la add()
méthode en la passant comme argument. Puisque ce mot-clé contient la référence à l'objet obj de la classe, nous pouvons changer la valeur de x et y à l'intérieur de la add()
méthode.