Java>Static a koi ca peut bien servir

Fermé
touffe - 7 janv. 2004 à 19:11
VilainPetitJava Messages postés 1 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 6 mai 2013 - 6 mai 2013 à 06:36
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

C est limpiiiiiiiiiiiiiiiiiiiiiiiiiiiiide comme explication

Merci
74
tafiscobar Messages postés 1277 Date d'inscription jeudi 7 décembre 2000 Statut Contributeur Dernière intervention 26 février 2009 177
7 janv. 2004 à 20:19
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
oki je te remercie ^^ tu me sauves la vie ,c pas rien :)
2
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
30 mars 2010 à 01:19
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
merci RaoufRoumanie ;-), très bien expliqué :)
0
lindap Messages postés 60 Date d'inscription lundi 8 février 2010 Statut Membre Dernière intervention 31 mai 2011 1
10 déc. 2010 à 22:50
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 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 6 mai 2013
6 mai 2013 à 06:36
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 672 Date d'inscription mardi 30 mars 2010 Statut Membre Dernière intervention 13 avril 2016 135
31 mars 2010 à 11:53
De toute façon il n'est jamais très bon de partager une ressource. C'est même fortement déconseillé.
-2
+1
0
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 1277 Date d'inscription jeudi 7 décembre 2000 Statut Contributeur Dernière intervention 26 février 2009 177
22 nov. 2008 à 01:33
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 1277 Date d'inscription jeudi 7 décembre 2000 Statut Contributeur Dernière intervention 26 février 2009
7 mars 2009 à 01:58
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
17 mars 2009 à 15:45
Le probleme vient peut-être du fait que ta variable statique est private au lieu de protected?
0
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