Variable d instance?ou variable de classe

Fermé
meriama_s Messages postés 99 Date d'inscription jeudi 13 octobre 2005 Statut Membre Dernière intervention 20 août 2008 - 23 nov. 2006 à 10:49
 toto - 5 août 2020 à 23:23
salut tout le monde ??

est ce que quelqu un peut me dire la difference entre une variable de classe et une variable d instance??
A voir également:

3 réponses

kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
23 nov. 2006 à 10:56
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.
31
meriama_s Messages postés 99 Date d'inscription jeudi 13 octobre 2005 Statut Membre Dernière intervention 20 août 2008
23 nov. 2006 à 11:10
mercie bcp , votre reponse est tres claire, et convainconte.
0
svp je veux bien savoir est ce que les variables de classe peuvent etre utilisees hors de cette classe?
merci.
-1
"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.
0
moi je trouve ça pas du tout clair comme réponse
0
Bonjour à tous.
" Si une instance (objet) change sa valeur, elle sera également changée pour les autres instances. "
C'était ça qu'il me manquait pour bien comprendre la différence entre les deux types de variables.
Merci beaucoup.
0
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
7
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).
5