Bonjour les GARS,
j'ai pas bien compris l'utilisation du mot clé this quelqu'un peut me l'expliquer avec un exemple concret et simple
A+
Bonjour les GARS,
j'ai pas bien compris l'utilisation du mot clé this quelqu'un peut me l'expliquer avec un exemple concret et simple
A+
LE mot clé this est une référence sur l'instance en cours d'utilisation.
Il permet par exemple de différencier un attribut, d'une variable passé en paramètre.
Un attribut static ne peut pas être référencé par this.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public class Constructeur{ protected String variable; public Constructeur (String variable){ variable = variable; // On ne sait pas vraiment qui est assigné à qui. this.variable = variable; // l'attribut reçoit la valeur du paramètre variable = this.variable; // le paramètre reçoit la valeur de l'attribut } }
le mot clé this représente soit, comme indiqué précédement, l'instance courante de la classe courante. Soit, dans une autre notation, un autre constructeur de la classe courante. Exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public class MaClass{ String a; public MaClass(String a){ this.a=a; // l'attribut a prend la valeur de la variable locale a } public MaClass(){ this("Bonjour"); // appel du constructeur MaClass(String) avec comme paramètre "Bonjour" } }
Effectivement j'avais oublié cette notion![]()
Je reprend l'exemple de Tchize,
dans cet exemple, instance1 est différent de instance2. Ils sont de même type mais chacune des variable est une instance de la classe MaClasse.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 MaClass instance1 = new MaClass("1"); MaClass instance2 = new MaClass("2");
admettons que dans la classe MaClass, il y ait une méthode :
Lorsque je fait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public String getA(){ return this.a; }
le mot clé this fera référence à l'objet créé lors de l'instruction
Code : Sélectionner tout - Visualiser dans une fenêtre à part instance1.getA();
Code : Sélectionner tout - Visualiser dans une fenêtre à part MaClass instance1 = new MaClass("1");
Au contraire si je fait :
Alors le mot clé this fera référence à l'objet créé lors de l'instruction
Code : Sélectionner tout - Visualiser dans une fenêtre à part instance2.getA();
Je sais pas si j'ai été très clair.
Code : Sélectionner tout - Visualiser dans une fenêtre à part MaClass instance2 = new MaClass("2");
instance courante = instance actuelle de la classe, celle pour laquelle le code de la méthode est occupé de travailler.
Salut,
le Code:
J'ai pensé de mettre le code que je voudrais comprendre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132 public class Ville { private String nomVille; private String nomPays; private int nbreHabitant; private char categorie; public Ville() // constructeur par défaut { nomVille = "Inconnu"; nomPays = "Inconnu"; nbreHabitant = 0; this.setCategorie(); } // Constructeur d'initialisation public Ville(String pNom, int pNbre, String pPays) { nomVille = pNom; nomPays = pPays; nbreHabitant = pNbre; this.setCategorie(); } // ACCESSEURS //Retourne le nom de la ville public String getNom() { return nomVille; } //Retourne le nom du pays public String getNomPays() { return nomPays; } //Retourne le nombre d'habitants public int getNombreHabitant() { return nbreHabitant; } //Retourne la catégorie de la ville public char getCategorie() { return categorie; } // MUTATEURS //nom de la ville public void setNom(String pNom) { nomVille = pNom; } //Définit le nom du pays public void setNomPays(String pPays) { nomPays = pPays; } //Définit le nombre d'habitants public void setNombreHabitant(int nbre) { nbreHabitant = nbre; this.setCategorie(); } //METHODES DE CLASSE //Définit la catégorie de la ville private void setCategorie() { int bornesSuperieures[] = {0, 1000, 10000, 100000, 500000, 1000000, 5000000, 10000000}; char categories[] = {'?', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'}; int i = 0; while (i < bornesSuperieures.length && this.nbreHabitant>=bornesSuperieures[i]) i++; this.categorie = categories[i]; } //Retourne la description de la ville public String decrisToi(){ return "\t"+this.nomVille+" est une ville de "+this.nomPays+", elle comporte : "+this.nbreHabitant+ " => elle est donc de catégorie : "+this.categorie; } // Retourne une chaîne de caractères selon le résultat de la comparaison public String comparer(Ville v1){ String str = new String(); if (v1.getNombreHabitant() > this.nbreHabitant) str = v1.getNom()+" est une ville plus peuplée que "+this.nomVille; else str = this.nomVille+" est une ville plus peuplée que "+v1.getNom(); return str; } }
en faite y a quelque trucs que j'arrive pas à les saisir trés bienmes questions sont:
1- pourquoi on a écrit "this.setCategorie();" dans le constructeur par défaut ainsi que dans le consctructeur d'initialisation autrement le role de this ici?
2- quand on a ecrit:
pourquoi on a mit "this.nbreHabitant" et non pas "nbreHabitant " ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 private void setCategorie() { int bornesSuperieures[] = {0, 1000, 10000, 100000, 500000, 1000000, 5000000, 10000000}; char categories[] = {'?', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'}; int i = 0; while (i < bornesSuperieures.length && this.nbreHabitant>=bornesSuperieures[i]) i++; this.categorie = categories[i]; }
quand on ecrit : this.categorie=categorie[i]; est-ce que this veut dire que la variable categorie de la calsse Ville.?
J'espere que mes soucis sont claire...
A+
et merci d'avance de m'avoir aider à bien comprendre cette ce code..![]()
Bonjour,
"this" devant l'appel à une méthode ne sert à rien. (si ce n'est esthétique)
En revanche, lorsqu'on utilise une propriété (variable de classe), this peut être nécessaire si un paramètre porte le même nom.
En l'occurrence, ça revient au même car il n'y a pas d'ambiguïté avec un paramètre.
Ici on a deux variables dont le nom se ressemble mais ce ne sont pas les mêmes noms (il y a une erreur dans la recopie du code, j'ai corrigé en gras).
Le this n'est également pas obligatoire dans ce cas car il n'y a pas non plus d'ambiguïté.
Il s'agit bien de la variable categorie de l'instance courante de cette classe Ville.
Comme viens de le dire Nudger, dans ce code, tous les this utilisé le sont purement par esthétique :
- il n'y a aucune ambiguïté entre les variables,
- On peut s'en passer dans l'appel a la méthode setCategories()
Salut,
je pense que la boucle ci-dessus donne toujours la categorie A si on a une ville de 0 habitant? or il faut avoir un "?" quelqu'un peut m'expliquer le déroulement de cette boucle je sais que c'est simple mais y a quelque chose qui m'échappe
A+
Merci encore de votre patience ...
L'opérateur de comparaison est >= "supérieur ou égal." Même zéro est supérieur ou égal à zéro.
Partager