c'est un pointeur implicite vers lui-même. En termes simples, quel objet appelle la méthode où il se trouve, alors c'est cet objet.
Exemple de code : TestThis_1.java
Copiez le code comme suit :
/* Question : Qu'est-ce que c'est
* Résultat de sortie :
*A@4e44ac6a
*/
classe publique TestThis_1 {
public static void main (String[] arguments) {
A aa = nouveau A();
System.out.println(aa.f()); //aa.f(), renvoie la référence (pointeur) de l'objet aa
}
}
classe A {
public A f() {
return this ; //Renvoie une référence à l'objet de classe A de l'objet qui appelle la méthode f()
}
}
Utilisations courantes de ceci
1. Distinguer les variables portant le même nom
Exemple de code : TestThis_2.java
Copiez le code comme suit :
/* Utilisation courante de ceci 1 : Distinguer les variables portant le même nom
* Résultat de sortie :
* ceci. je = 1
* je = 33
*/
classe publique TestThis_2 {
public static void main (String[] arguments) {
A aa = nouveau A(33);
}
}
classe A {
public int i = 1; //Ce i est une variable membre
/*Remarque : Généralement pas écrit comme ceci, le constructeur est principalement destiné à l'initialisation, et écrit ainsi est principalement pour faciliter la compréhension*/
public A(int i) { //Ce i est une variable locale
System.out.printf("this. i = %d/n", this.i); //this.i fait référence à la variable membre i de l'objet lui-même
System.out.printf("i = %d/n", i); //i est ici la variable locale i
}
}
2. Appels mutuels entre constructeurs
Exemple de code : TestThis_3.java
Copiez le code comme suit :
/* Usage courant de this 2 : s'appeler dans le constructeur */
classe publique TestThis_3 {
public static void main (String[] arguments) {
}
}
classe A {
int je, j, k;
public A(int je) {
ceci.i = je;
}
public A(int je, int j) {
/* i = 3; error S'il n'est pas commenté, une erreur sera signalée : lors de l'appel du constructeur avec this(...), elle ne peut être placée que dans la première phrase.
* TestThis_3.java:20 : erreur : l'appel à this doit être la première instruction du constructeur
* ceci(je);
* ^
*1 erreur
*/
ceci(je);
ceci.j = j;
}
public A(int je, int j, int k) {
ceci(je, j);
ceci.k = k;
}
}
Choses à noter
Les méthodes modifiées par static n'ont pas ce pointeur. Étant donné que la méthode modifiée par static est publique, on ne peut pas dire à quel objet spécifique elle appartient.
Exemple de code : TestThis_4.java
Copiez le code comme suit :
/*Il n'y a pas de pointeur this dans la méthode statique*/
classe publique TestThis_4 {
public static void main (String[] arguments) {
}
}
classe A {
statique A f() {
rends ceci ;
/* Message d'erreur : TestThis_4.java:10 : erreur : variable non statique qui ne peut pas être référencée à partir d'un contexte statique
* renvoie ceci ;
* ^
*1 erreur
*/
}
}