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
toto - 5 août 2020 à 23:23
3 réponses
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
23 nov. 2006 à 10:56
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.
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.
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
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
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).
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).
23 nov. 2006 à 11:10
6 nov. 2009 à 09:49
merci.
21 déc. 2011 à 15:09
Tu voulais dire variable d'instance ici. T as dit 2 fois variables de classe.
3 mars 2012 à 10:45
5 août 2020 à 23:23
" 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.