Attribut static
Chekchak
Messages postés
39
Statut
Membre
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour , j'essaies d'apprendre a programmer en java dernièrement et je n'arrive pas a trouver sur google la reponse a ma question :
quand on declare un attribut static pour une class, je sais que cet attribut est le meme pour tout les objet de cette class , mais est il modifiable ?
si on a une class A avec un attribut static b
et dans le main on declare 3 objects X Y Z de type A
peut on modifier b ?
pour chaque object? ou une seule fois pour tout les object ? ou jamais?
and sorry for my bad french x)
quand on declare un attribut static pour une class, je sais que cet attribut est le meme pour tout les objet de cette class , mais est il modifiable ?
si on a une class A avec un attribut static b
et dans le main on declare 3 objects X Y Z de type A
peut on modifier b ?
pour chaque object? ou une seule fois pour tout les object ? ou jamais?
and sorry for my bad french x)
1 réponse
-
Bonjour
pour chaque object?
Quand tu veux accéder à b est ce que X.b ça marche? Non? C'est parce ce que b n'appartient pas à X, ni à Y ni à Z. Il a appartient à la classe, A.bou une seule fois pour tout les object ?
Même réponseou jamais?
Là ça dépend s'il est en lecture seule pas moyen de le changer
-
Salut !
"Quand tu veux accéder à b est ce que X.b ça marche?"
Ça affichera un warning à la compilation, mais oui c'est possible.
b appartient à la classe A, donc on devrait y accéder par A.b, cependant X, Y, Z étant des objets de A ils peuvent aussi accéder à A.b, mais c'est bien un seul et unique objet commun. (On peut aussi y accéder par les classes héritées et leurs objet, sous certaines conditions)
"Là ça dépend s'il est en lecture seule pas moyen de le changer"
Le mot cléstatic
seul n'empêche pas de modifier la valeur.
En revanche le mot cléfinal
pourrait empêcher d'affecter une nouvelle valeur à b (une nouvelle référence d'objet) mais ça n'interdirait pas d'en modifier l'état interne via une méthode de modificaton.
Remarque : La plupart de ces questions s'expérimentent facilement...
Remarque avancée : Une classe en Java étant elle même un objet, on peut lui appliquer certaines méthodes et par exemple faire sauter le mot clé final de la variable à l'exécution pour pouvoir lui réaffecter une nouvelle valeur bien que cela soit interdit à la compilation. Donc on peut toujours modifier une variable ;-) -
-
"ne veut pas dire que X.b existe"
Si, il existe, mais il n'est pas spécifique à l'objet X.
De plus, il est impossible de créer un attribut b supplémentaire qui ne serait pas static, car il aurait le même nom que le b static de A.
"on peut écrie GetB qui retourne A.b et qui s'utilise X.GetB()"
On peut, mais on peut aussi retourner b directement, sans préciser que c'est A.b
Et dans le même ordre d'idée, si la méthode est static, X pourra quand même l'utiliser lui même sans avoir à faire un A.GetB (mais toujours avec un warning).public class A { static int b = 0; static int getB() { return b; } int getB2() { return b; } public static void main(String[] args) { A x = new A(); A y = new A(); System.out.println(A.b); // 0 System.out.println(x.b); // 0 (warning) System.out.println(y.b); // 0 (warning) A.b = 1; System.out.println(A.b); // 1 System.out.println(x.b); // 1 (warning) System.out.println(y.b); // 1 (warning) x.b = 2; // (warning) System.out.println(A.b); // 2 System.out.println(x.b); // 2 (warning) System.out.println(y.b); // 2 (warning) System.out.println(A.getB()); // 2 System.out.println(x.getB()); // 2 (warning) System.out.println(y.getB()); // 2 (warning) System.out.println(x.getB2()); // 2 System.out.println(y.getB2()); // 2 } } -
-