< -->

samedi 12 mars 2011

Le mot clé 'this'

Lorsqu'il existe deux objets a et b du même type , il est intéressant de se demander comment
on peut appeler une méthode f( ) sur ces deux objets :

class Test { void f(int i) { /* ..
*instructions
*/ } }
Test a = new Test();
Test b = new Test();
a.f(1);
b.f(2);
Mot clé this en Java



le problème qui s’oppose : s'il y a une unique méthode f( ), comment cette méthode peut-elle savoir si elle a été appelée sur l'objet a ou b ?

Pour permettre au développeur d'écrire le code dans une syntaxe pratique et orienté objet
dans laquelle on «envoie un message vers un objet,» le compilateur effectue un travail secret pour le développeur. Il y a un premier paramètre caché passé à la méthode f( ), et ce paramètre est une référence vers l'objet en train d'être manipulé. Les deux appels de méthode précédents correspondent donc à ceci :

Test.f(a,1);
Test.f(b,2);

Ce travail est interne et il est impossible d'écrire des expressions de ce type directement en
espérant que le compilateur les acceptera, mais cela donne une idée de ce qui se passe.

Supposons maintenant que l'on est à l'intérieur d'une méthode et que l'on désire obtenir une
référence sur l'objet courant. Comme cette référence est passée en tant que paramètre caché par le compilateur, il n'y a pas d'identificateur pour elle. Cette pour cette raison que le mot clé this existe. this - qui ne peut être utilisé qu'à l'intérieur d'une méthode - est une référence sur l'objet pour lequel cette méthode à été appelée. On peut utiliser cette référence comme tout autre référence vers un objet. Il n'est toutefois pas nécessaire d'utiliser this pour appeler une méthode de la classe courante depuis une autre méthode de la classe courante ; il suffit d'appeler cette méthode. La référence this est automatiquement utilisée pour l'autre méthode. On peut écrire :

class MaClass {
void M1() { /* ... */ }
void M2() { M1(); /* ... */
//this.M1() ; est aussi vrai
}
}

A l'intérieur de M2( ), on pourrait écrire this.M1( ) mais ce n'est pas nécessaire. Le compila-
teur le fait automatiquement pour le développeur. Le mot-clé this est uniquement utilisé pour les cas spéciaux dans lesquels on doit utiliser explicitement une référence sur l'objet courant. Par exemple, il est couramment utilisé dans les constructeurs :

public class Maclass {

//variable de class 

int a;
boolean ok;

//constructeur

public Maclass(int a, boolean ok) {
this.a = a;
this.ok = ok;
}

}

Pour distinguer enter le variable ‘a’ variable de class et la variable ‘a’ passer en argument dans le constructeur on ajout le mot-clé this .

Advertiser