Variable d instance?ou variable de classe [Fermé]

Messages postés
104
Date d'inscription
jeudi 13 octobre 2005
Statut
Membre
Dernière intervention
20 août 2008
- - Dernière réponse :  jdo - 7 avril 2012 à 01:28
salut tout le monde ??

est ce que quelqu un peut me dire la difference entre une variable de classe et une variable d instance??
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
4100
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
2 septembre 2013
825
29
Merci
Une variable de classe est une variable qui sera commune à toutes les instance de cette classe, par exemple une constante. ex :

private static final int TOTO = 1;

elle ne pourra pas etre changée et est vu de tous. Meme chose pour :
private static int variable = 2;

Cette variable est de type static, donc commune à toutes les instances de la classe. Si une instance (objet) change sa valeur, elle sera également changée pour les autres instances.

Les variables de classes sont toutes les autres, de type non static.
Ex :
private final String TOTO = "bonjour"; // constante
private int var = 0; // variable

Les exemples donnés sont pour le JAVA, mais c'est le même principe il me semble pour les autres langages.

Dire « Merci » 29

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 64127 internautes nous ont dit merci ce mois-ci

meriama_s
Messages postés
104
Date d'inscription
jeudi 13 octobre 2005
Statut
Membre
Dernière intervention
20 août 2008
-
mercie bcp , votre reponse est tres claire, et convainconte.
svp je veux bien savoir est ce que les variables de classe peuvent etre utilisees hors de cette classe?
merci.
"Les variables de classes sont toutes les autres, de type non static. "
Tu voulais dire variable d'instance ici. T as dit 2 fois variables de classe.
moi je trouve ça pas du tout clair comme réponse
7
Merci
Je crois que variable de classe est une juste un autre nom pour une variable static
car comme le disait "kij_82": "Une variable de classe est une variable qui sera commune à toutes les instances de cette classe"

Ainsi si tu as la classe suivante:

public class MaClass {
public int VarInstance= 0;
public static int VarDeClass= 0;
}

...et que tu l'utilises comme ça:

MaClass a = new MaClass();
MaClass b = new MaClass();

System.out.println("Avant...");
System.out.println("A: Var inst="+a.VarInstance+", class="+a.VarDeClass);
System.out.println("B: Var inst="+b.VarInstance+", class="+b.VarDeClass);

a.VarInstance = 1;
a.VarDeClass = 1;
b.VarInstance = 2;
b.VarDeClass = 2;

System.out.println("Apres...");
System.out.println("A: Var inst="+a.VarInstance+", class="+a.VarDeClass);
System.out.println("B: Var inst="+b.VarInstance+", class="+b.VarDeClass);

... tu obtiendras ça:
Avant...
A: Var inst=0, class=0
B: Var inst=0, class=0
Apres...
A: Var inst=1, class=2
B: Var inst=2, class=2


Truc intéressant (je sais pas si c'est le cas dans tous les langages) mais en java par tu peux aussi faire ce que j'appellerais par extension des "METHODES de classes" ce qui implique que tu n'as pas besoin de systématiquement instancier ta class pour utiliser ta méthode !

exemple:

public class MaClass {
public static void showCoucou() {
System.out.print("coucou");
}
}

Il suffira d'ecrire:

MaClass.ShowCoucou();

Mais c un truc qu'on utilise tous hyper souvent en fait, rien que System.out.print() en est un example ! :p
5
Merci
Bonjour,

Ce n'est pas tout à fait comme ça en VB. Le mot clé Shared permet de déclarer une variable commune à toutes les instances d'une même classe, alors que Static permet de déclarer une variable locale au sein d'un procédure dont le contenu sera préservé entre chaque appel de cette procédure et pour la durée de vie de chaque instance si cette procédure est membre d'une classe. Par contre la variable locale déclarée avec Static pourra avoir un contenu différent pour chaque instance. VBA ne supporte pas le mot clé Shared, alors que Static apporte peu d'intérêt dans les procédures définies dans les modules de classe (on y préférera l'utilisation de variables privées membres de la classe et du constructeur Class_Initialize).