Java>Static a koi ca peut bien servir

touffe -  
VilainPetitJava Messages postés 1 Statut Membre -
Salut tt le monde!! c assez urgent mais j'ai besoin de savoir (partiel demain) a koi sert
static montype mavariable; et a koi ca peut bien servir aussi dans une optique objet
merci pour vos reponses , elles seront tres apreciee :)
A voir également:

9 réponses

sissou81
 
C est limpiiiiiiiiiiiiiiiiiiiiiiiiiiiiide comme explication

Merci
74
tafiscobar Messages postés 1281 Statut Contributeur 177
 
salut, declarer une variable static (ou meme une fct) signifie que ce membre n'est pas specifiq a un objet mais a la classe, tous les objets de la classe partagent cette meme variable. Et de ce fait tu peux y acceder ainsi : Maclasse.MonVarStatic
ex:
class UneClasse {
public static int counter = 0;
}

class Main {
public static void main (String []args) {
UneClasse un = new UneClasse (), deu = new UneClasse ();
un.counter++;
println (UneClasse.counter); // affiche 1
deu.counter++ ;
println (un.counter); // affiche 2
}
}

Voila, j'espere t'avoir eclairci.
tafiscobar "lou waye def bopame"
la nullite n'existe pas, l'ignorance oui, ah je suppose!!!
45
touffe
 
oki je te remercie ^^ tu me sauves la vie ,c pas rien :)
2
Max
 
Merci de cette explication, beaucoup plus clair que beaucoup de pavé inutile !
2

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
raoufRoumanie
 
class UneClasse {
public static int counter = 0; // le counter = 0
}

---------------------------------------------
class Main {
public static void main (String []args) {
UneClasse un = new UneClasse (), deu = new UneClasse ();
un.counter++;
System.out.println (un.counter); // ici le counter = 1
deu.counter++ ;
System.out.println (deu.counter); // ici puisque en a la constante et defenie comme static elle va prend le nouveau modification signifie counter = 1 pas zeros et si le counter n'est pas defenie static counter=1 puisque il reste toujour zeros donc dans ce cas le counter = 2;
}
}


juste une petite modification merci de votre bon reponse
0
tivoche
 
merci RaoufRoumanie ;-), très bien expliqué :)
0
lindap Messages postés 86 Statut Membre 1
 
class UneClasse {
public static int counter = 0; // le counter = 0
}
class Main {
public static void main (String []args) {
UneClasse un = new UneClasse (), deu = new UneClasse ();
UneClasse.counter++;
System.out.println (UneClasse.counter); // counter = 1
UneClasse.counter++ ;
System.out.println (UneClasse.counter); // counter = 2
}
}

Résultat d'exécution:
1
2
0
VilainPetitJava Messages postés 1 Statut Membre
 
Je viens de tomber sur ce vieux post et je propose mon explication ci-dessous :

public class cours2
{
/**
* @param args
*/
public static void main(String[] args)
{
System.out.println("Au préalable j'ai créé une classe Classe1 dans laquelle j'ai déclaré ceci : public static int counter = 0; ");
Classe1 un = new Classe1 (), deux = new Classe1 ();
System.out.println("test 0 - avant toute modification de counter :"+Classe1.counter);//Affiche 0
Classe1.counter++;
System.out.println("test 1 - incrémentation de counter à partir de instance un, impact sur counter déclarée en Classe1 : "+Classe1.counter);//Donc affiche 1
System.out.println("test 2 - impact sur counter déclarée en instance un : "+un.counter); //Affiche aussi 1 car Classe1 et un partagent la même variable.
System.out.println("test 3 - impact sur counter déclarée en instance deux : "+deux.counter);//Affiche aussi 1 car Classe1, deux et un partagent la même variable.
Classe1.counter++ ;
System.out.println("test 4 - incrémentation de counter à partir de instance deu, impact sur counter déclarée en Classe1 : "+Classe1.counter);//Affiche 2
System.out.println("test 5 - impact sur counter déclarée en instance un : "+un.counter);//Affiche ...2
System.out.println("test 6 - impact sur counter déclarée en instance deux : "+deux.counter);//Affiche un truc de malade : 2
System.out.println("Conclusion : si on déclare une variable static dans une classe, les instances de cette classe partagerons la même valeur. Si on modifie la variable dans une des instances, les autres instances y compris la classe elle-même partageront cette modification.");
System.out.println("Par conséquent il n'y a aucun intérêt dans les instances un et deux à appeler la valeur de counter, il suffit d'appeler Classe1.counter ");
}
}

-----------------------------------------------------------------
- CONSOLE -
-----------------------------------------------------------------
Au préalable j'ai créé une classe Classe1 dans laquelle j'ai déclaré ceci : public static int counter = 0;
test 0 - avant toute modification de counter :0
test 1 - incrémentation de counter à partir de instance un, impact sur counter déclarée en Classe1 : 1
test 2 - impact sur counter déclarée en instance un : 1
test 3 - impact sur counter déclarée en instance deux : 1
test 4 - incrémentation de counter à partir de instance deu, impact sur counter déclarée en Classe1 : 2
test 5 - impact sur counter déclarée en instance un : 2
test 6 - impact sur counter déclarée en instance deux : 2
Conclusion : si on déclare une variable static dans une classe, les instances de cette classe partagerons la même valeur. Si on modifie la variable dans une des instances, les autres instances y compris la classe elle-même partageront cette modification.
Par conséquent il n'y a aucun intérêt dans les instances un et deux à appeler la valeur de counter, il suffit d'appeler Classe1.counter
0
DasSium95 Messages postés 741 Statut Membre 135
 
De toute façon il n'est jamais très bon de partager une ressource. C'est même fortement déconseillé.
-2
111
 
+1
0
globeriding
 
Bonjour,

Je veux pas dire mais cet exemple est complètement faux :

class UneClasse {
public static int counter = 0;
}

class Main {
public static void main (String []args) {
UneClasse un = new UneClasse (), deu = new UneClasse ();
un.counter++;
println (UneClasse.counter); // affiche 1
deu.counter++ ;
println (un.counter); // affiche 2
}
}

Tout ce qui est en gras est invalide, nous ne pouvons appeler la propriété counter que par le nom de sa classe : UneClasse.counter
-3
tafiscobar Messages postés 1281 Statut Contributeur 177
 
Faux. Le fait qu'il soit static dit que c'est une variable de classe. Donc on peut aussi bien faire MaClasse.counter que objet.counter. Il faudrait peut-être que revoir vos cours.

0
burstedman > tafiscobar Messages postés 1281 Statut Contributeur
 
Salut,

Je cherche justement à connaître la philosophie Java puisque j'ai un problème bien bizarre.
Soyons clair, la philosophie objet veut que :
-> un membre de classe (introduit par satic) ne peut être atteint que par la classe.
-> un membre d'objet (sans static donc) ne peut être que par un objet.
(nb: ce qui contredit tafiscobar et sur ce point là j'en suis certain)

Seulement voilà, j'ai une classe A et une classe A' Java.
A' hérite de A et A incrémente un compteur static dans son constructeur:

class A
{
private static int count = 0; //membre de la classe A
protected int id; //membre de tout objet de A
public A() { id = ++count; }
}

class A' extends A
{
public A'() { super(); /* censé incrémenter A.count */ }
}

Le problème c que pour tout les objets de A', id = 0 ????!!!!!
C'est comme si chaque objet de A' avait son membre count alors qu'il ne devrait exister qu'en un seul exemplaire dans la définition de la classe A.

Quelqu'un a une idée?
0
âne ô nîmes > burstedman
 
Le probleme vient peut-être du fait que ta variable statique est private au lieu de protected?
0
infotiste_n7
 
Salut,
Vous avez tout à fait raison, sinon c'est quoi la difference entre une variable normale et variable static, en fait avec une variable , on peut lui faire ds une autre classe sans avoir à instancier le classe; ds l'exemple fourni le fait d'avoir declaré la variable n'aucun interet dans ce cas
Ciao, ciao ;)
0