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)
A voir également:
- Associez chaque terme avec un attribut, une donnée, un enregistrement, une table, une valeur ou une variable.
- Comment faire une table des matières sur word - Guide
- Comment enregistrer une conversation - Guide
- Table ascii - Guide
- Enregistrer une musique comme sonnerie - Guide
- Faites afficher avec un fond coloré les cellules qui contiennent une valeur comprise entre 250 et 350. quel nombre est dessiné en surbrillance ? ✓ - Forum Excel
1 réponse
Bonjour
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.b
Même réponse
Là ça dépend s'il est en lecture seule pas moyen de le changer
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.b
ou une seule fois pour tout les object ?
Même réponse
ou jamais?
Là ça dépend s'il est en lecture seule pas moyen de le changer
"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é seul n'empêche pas de modifier la valeur.
En revanche le mot clé 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 ;-)
Pour le reste de ta réponse, je te suis, je n'ai pas développer car il y a des subtilité que je en maitrise pas.
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 } }