[java] Methode et champs static

Methode et champs static [java] - Java - Programmation

Marsh Posté le 14-05-2003 à 15:35:59    

Que est l'interet du mot clé static a part le fait qu'il sopit accessible qu' à partir de la classe.
Dans quel caas l'utiliser

Reply

Marsh Posté le 14-05-2003 à 15:35:59   

Reply

Marsh Posté le 14-05-2003 à 16:51:29    

accessible qu'a partir de la classe ? kesako ?
 
static signifie que la variable/fonction peut etre utilisée sans avoir une instance de la classe.
les variables static sont souvent utilisee pour faire des genres de variables globales :/, ca p[eut servir a connaitre le nombre d'instances aussi (voir exemple).
 
 
teste ca :

Code :
  1. public class Exemple {
  2.    int i=3;
  3.    static int j=0;
  4.  
  5.   public Exemple() {
  6.     j++;
  7.   }
  8.   public static void main(String [] args) {
  9.     Exemple exemple=new Exemple();
  10.     System.out.println(exemple.i);
  11.     System.out.println(Exemple.j);
  12.     Exemple exempleBis=new Exemple();
  13.     System.out.println(Exemple.j);
  14.   }
  15. }



---------------
get amaroK plugin
Reply

Marsh Posté le 14-05-2003 à 16:53:55    

fredodidoo a écrit :

Que est l'interet du mot clé static a part le fait qu'il sopit accessible qu' à partir de la classe.
Dans quel caas l'utiliser  


 
[:spamafote]
 
bin static c'est pas lié à une instance particulière mais a la classe. Ca veut dire que tu n'es pas obligé de créer une instance de la classe pour l'utiliser


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 12-06-2003 à 22:29:39    

Bonjour , moi j'aurais voulu savoir alors quel est l'effet de rendre une classe statique ? dans quel but faire cela ?

Reply

Marsh Posté le 12-06-2003 à 23:04:07    

fredodidoo a écrit :

Que est l'interet du mot clé static a part le fait qu'il sopit accessible qu' à partir de la classe.
Dans quel caas l'utiliser  


Tu vois les variables globales en C ?
Ben c'est pareil c'est mal !


Message édité par nraynaud le 12-06-2003 à 23:04:53
Reply

Marsh Posté le 13-06-2003 à 00:59:44    

nraynaud a écrit :

Tu vois les variables globales en C ?
Ben c'est pareil c'est mal !


 :heink:  
Sans ça, je vois pas comment tu ferais plein de trucs.
Et puis ca n'a rien à voir avec les variables globales en C, static, c'est "exactement" comme les static du C++.


Message édité par deltaden le 13-06-2003 à 01:00:05
Reply

Marsh Posté le 13-06-2003 à 08:24:30    

deltaden a écrit :


 :heink:  
Sans ça, je vois pas comment tu ferais plein de trucs.
Et puis ca n'a rien à voir avec les variables globales en C, static, c'est "exactement" comme les static du C++.


 
Bin si tu ne "vois" pas c'est que ton design est mauvais. faire du static c'est mal et d'ailleurs c'est pas OO ;)
 
Utiliser le singleton pattern revient à peu près au meme en fait.
 
Les attributs statiques je le fais encore souvent c'est pratique dans pas mal de cas. Mais une classe statique ca non, qd meme pas ;)


Message édité par darklord le 13-06-2003 à 08:25:36

---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 13-06-2003 à 08:27:01    

fredodidoo a écrit :

Que est l'interet du mot clé static a part le fait qu'il sopit accessible qu' à partir de la classe.


 
Pouvoir stocker des informations au niveau de la métaclasse et non d'une instance d'une classe. Cela permet de stocker une information qui portant sur l'ensemble des instances d'une classe et non chacune d'entre elle.
 
Le cas le plus compréhensible est un compteur du nombre d'instance (c'est bien une information de la metaclasse), ou une référence vers une instance unique si on ne veut instancier qu'un exemplaire de la classe (pattern singleton).


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 13-06-2003 à 08:46:35    

DarkLord a écrit :


Mais une classe statique ca non, qd meme pas ;)


 
Une classe statique !? J'connais même pas ! J'comprend pas bien à quoi ça peut correspondre...

Reply

Marsh Posté le 13-06-2003 à 08:47:12    

El_gringo a écrit :


 
Une classe statique !? J'connais même pas ! J'comprend pas bien à quoi ça peut correspondre...


 
bin que des méthodes statiques dedans quoi  


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 13-06-2003 à 08:47:12   

Reply

Marsh Posté le 13-06-2003 à 08:47:57    

El_gringo a écrit :


 
Une classe statique !? J'connais même pas ! J'comprend pas bien à quoi ça peut correspondre...


C'est une javasserie :o
 
http://www.javaworld.com/javaworld [...] atic2.html


Message édité par kadreg le 13-06-2003 à 08:48:31

---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 13-06-2003 à 08:48:48    


 
[:prosterne] kadreg [:prosterne2]


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 13-06-2003 à 08:49:00    

DarkLord a écrit :


 
bin que des méthodes statiques dedans quoi  


 
Ha, d'accord. Ben j'imagine que c'est moche. Mais y a un mot clé pour ça ? "static" peut s'appliquer à une classe ?

Reply

Marsh Posté le 13-06-2003 à 08:49:49    

El_gringo a écrit :


 
Ha, d'accord. Ben j'imagine que c'est moche. Mais y a un mot clé pour ça ? "static" peut s'appliquer à une classe ?


 
non et sinon kadreg a répondu mieux que moi en fait :o


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 13-06-2003 à 08:54:04    

DarkLord a écrit :


 
non et sinon kadreg a répondu mieux que moi en fait :o


 
C'est clair !

Reply

Marsh Posté le 13-06-2003 à 08:57:35    

El_gringo a écrit :


 
C'est clair !


 
ta gueule :o
si t'es pas content c'est le même prix :o


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 13-06-2003 à 09:12:02    

DarkLord a écrit :


 
ta gueule :o
si t'es pas content c'est le même prix :o


 
Ho, Dark, c'est si bon toute cette douceur...

Reply

Marsh Posté le 13-06-2003 à 09:23:24    

El_gringo a écrit :


 
Ho, Dark, c'est si bon toute cette douceur...


 
n'est-ce-pas? :o


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 13-06-2003 à 09:39:31    

DarkLord a écrit :


bin que des méthodes statiques dedans quoi  


Pourquoi c'est mal ? :??:
Perso j'trouve ça pratique pour faire des méthodes utilitaires, genre traitements sur des chaînes, sans avoir besoin d'une instance pour bosser [:spamafote]


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 13-06-2003 à 09:41:26    

Taiche a écrit :


Pourquoi c'est mal ? :??:
Perso j'trouve ça pratique pour faire des méthodes utilitaires, genre traitements sur des chaînes, sans avoir besoin d'une instance pour bosser [:spamafote]


 
Vi vi ok je veux pas cracher dans la soupe. Tu as raison meme si passer par un singleton est plus O.O
 
M'enfin c'est un détail [:spamafote]


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 13-06-2003 à 15:57:50    

DarkLord a écrit :

Bin si tu ne "vois" pas c'est que ton design est mauvais. faire du static c'est mal et d'ailleurs c'est pas OO ;)
 
Utiliser le singleton pattern revient à peu près au meme en fait.
 
Les attributs statiques je le fais encore souvent c'est pratique dans pas mal de cas. Mais une classe statique ca non, qd meme pas ;)


Ben je parlais d'attributs statiques, qui sont quand même parfois nécessaire (numéroter les instance...).
Je viens de découvrir qu'on pouvait déclarer des classes statiques, ca peut être utile.  
Mais c'est vrai que ca s'éloigne un peu de l'OO, mais bon on est toujours loin du global du C/C++.  [:proy]

Reply

Marsh Posté le 10-07-2003 à 10:42:11    

Si ma méthode renvoi un résultat qui est un calcul se basant uniquement sur les paramètres passés en entrée, j'ai le choix de la rendre static ou non.
 
Voyez-vous un intérêt/inconvénient à la rendre static ?
 
K.

Reply

Marsh Posté le 10-07-2003 à 10:46:44    

Ba l'intérêt c'est de pouvoir l'appeler de partout, depuis des méthodes statiques comme d'autres méthodes non-statiques. cf ce que je dis plus haut à ce propos : une méthode ayant un but strictement utilitaire et ne se servant pas de données inhérentes à la classe dans laquelle elle est déclarée peut tout à fait être statique. Personnellement, je trouve ça d'ailleurs plus logique : pas besoin d'instance pour pouvoir bosser [:spamafote]


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 10-07-2003 à 10:51:39    

Taiche a écrit :

Personnellement, je trouve ça d'ailleurs plus logique : pas besoin d'instance pour pouvoir bosser [:spamafote]


Je trouve aussi tentant de rendre systématiquement statiques les méthodes qui peuvent l'être, je me demande juste s'il n'y aurait pas une contre-indication à laquelle je n'aurais pas pensé.

Reply

Marsh Posté le 11-07-2003 à 09:15:34    

krosso a écrit :


Je trouve aussi tentant de rendre systématiquement statiques les méthodes qui peuvent l'être, je me demande juste s'il n'y aurait pas une contre-indication à laquelle je n'aurais pas pensé.


 
c'est pas OO
Si tu t'en fous d'avoir un desing OO propre bin alors fais le [:spamafote]


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 11-07-2003 à 09:23:17    

en tout cas, membre static et classe static ca a rien à voir !
 
pour une classe, static ne peut être utilisé que lors de la déclaration DANS une autre classe et permet juste de différencier d'une inner-classe => le static veut dire que la classe ne dépend pas de la classe englobante et n'a pas de référence vers une de ses instances.
 
ex : (avec une interface) java.util.Map.Entry


Message édité par benou le 11-07-2003 à 09:24:39

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 11-07-2003 à 09:28:14    

DarkLord a écrit :


Si tu t'en fous d'avoir un desing OO propre bin alors fais le [:spamafote]


 
[:tapai]
 


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 11-07-2003 à 10:14:02    

krosso a écrit :


Je trouve aussi tentant de rendre systématiquement statiques les méthodes qui peuvent l'être, je me demande juste s'il n'y aurait pas une contre-indication à laquelle je n'aurais pas pensé.


 

DarkLord a écrit :


 
c'est pas OO
Si tu t'en fous d'avoir un desing OO propre bin alors fais le [:spamafote]


 
Je suis pas d'accord avec Dark là. Si une méthode n'utilise aucun attribut de la classe, il faut la mettre en static. Par contre, conceptuellement parlant, ce cas ne devrait peut être pas se produire !(?)

Reply

Marsh Posté le 11-07-2003 à 10:19:00    

El_gringo a écrit :


 
 
 
Je suis pas d'accord avec Dark là. Si une méthode n'utilise aucun attribut de la classe, il faut la mettre en static. Par contre, conceptuellement parlant, ce cas ne devrait peut être pas se produire !(?)


 
bin c'est exactement ce que j'ai dit en plus détaillé hein. Plus précisément ce n'est pas OO d'avoir une méthode sur un objet qui n'ait pas besoin d'une instance de l'objet pour fonctionner. Cela dit si c'est le cas il faut effectivement qu'elle soie statique.
 
tjrs pas d'accord avec moi? :heink:


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 11-07-2003 à 10:23:06    

DarkLord a écrit :


c'est pas OO
Si tu t'en fous d'avoir un desing OO propre bin alors fais le [:spamafote]


El_gringo a écrit :


Je suis pas d'accord avec Dark là. Si une méthode n'utilise aucun attribut de la classe, il faut la mettre en static. Par contre, conceptuellement parlant, ce cas ne devrait peut être pas se produire !(?)


Et conceptuellement parlant ou avec un design OO qui arrache sa mère, on fait comment ? Faut bannir le static et laisser les méthodes qui utilisent rien de particulier à la classe en non static ? C'est quoi l'intérêt, à part se faire chier avec un new et laisser du taf au GC à la fermeture du bloc ? :??:  
J'avoue que j'ai un peu de mal à comprendre [:spamafote]


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 11-07-2003 à 10:25:18    

DarkLord a écrit :


Cela dit si c'est le cas il faut effectivement qu'elle soie statique.


 
Ou alors se demander si elle est bien à sa place dans CETTE classe, et ne mériterais pas d'aller ailleurs (Equivalent dans l'appli de java.lang.System).
 
Parcequ'une méthode comme ça dans une classe métier ...


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 11-07-2003 à 10:26:19    

pour savoir si je mets une méthode static, lma question que je me pose c'est :
 - est ce que c'est une fonctionnalité de mon objet ?
 - est ce que c'est une fonctionnalité de ma classe ?
 
souvent la réponse est très simple à déduire ...
Que la méthode ait besoin d'attributs ou non, on s'en tape un peu. (sauf que si elle en a besoin, c'est bien sûr qu'elle ne peut pas être static)


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 11-07-2003 à 10:28:17    

DarkLord a écrit :


 
bin c'est exactement ce que j'ai dit en plus détaillé hein. Plus précisément ce n'est pas OO d'avoir une méthode sur un objet qui n'ait pas besoin d'une instance de l'objet pour fonctionner. Cela dit si c'est le cas il faut effectivement qu'elle soie statique.
 
tjrs pas d'accord avec moi? :heink:


 
Huh ?
 
l'exemple le plus con qui me viennent a l'esprit c'est un truc que j'ai fait du genre (c++ mais l'idee est la meme):
 
 

Code :
  1. class CRC32
  2. {
  3. static long computeCRC32(unsigned char *data,int size)
  4. {
  5. //fais calcul sans rien toucher a CRC32, qui de toute facon n'a pas de membre
  6. }
  7. }


 
En quoi c pas OO ca ? je fais comment pour que ca soit OO ?
 
 

Reply

Marsh Posté le 11-07-2003 à 10:30:34    

la vrai question est : est ce qu'on a toujours besoin d'une architecture completement OO ?


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 11-07-2003 à 10:32:53    

chrisbk a écrit :


Code :
  1. class CRC32
  2. {
  3. static long computeCRC32(unsigned char *data,int size)
  4. {
  5. //fais calcul sans rien toucher a CRC32, qui de toute facon n'a pas de membre
  6. }
  7. }




 

Code :
  1. class MyFile
  2. {
  3.   byte[] data;
  4.  
  5.   long computeCRC32();
  6. }

Reply

Marsh Posté le 11-07-2003 à 10:33:54    

benou a écrit :

la vrai question est : est ce qu'on a toujours besoin d'une architecture completement OO ?


non, mais si tu as des bouts OO, des bouts fonctionnels, des bouts proceduraux, c'est gavant. Respecter une convention, que ce soit de codage ou de conception, c'est plus simple, c'est tout.

Reply

Marsh Posté le 11-07-2003 à 10:35:02    

lorill a écrit :


 

Code :
  1. class MyFile
  2. {
  3.   byte[] data;
  4.  
  5.   long computeCRC32();
  6. }




 
J'aime pas, trop dangereux (en C++), rien ne me dit que data soit encore vivant quand j'execute mon computeCRCmachin. Se trimballer avec des pointeurs comme ca c pas une bonne idée
 


Message édité par chrisbk le 11-07-2003 à 10:35:52
Reply

Marsh Posté le 11-07-2003 à 10:38:34    

chrisbk a écrit :


J'aime pas, trop dangereux (en C++), rien ne me dit que data soit encore vivant quand j'execute mon computeCRCmachin. Se trimballer avec des pointeurs comme ca c pas une bonne idée


 

Code :
  1. class MyFile
  2. {
  3. private byte[] data;
  4. public MyFile(data); //ou filename  
  5. long computeCRC32();
  6. }

 
 
et vu que tu touches pas au pointeurs, ca sera pas garbagé tant que t'aura l'instance de MyFile, vu que y'a une reference sur data.
 
et c'est pas plus dangereux que de passer un pointeur null a ta methode statique  [:sinclaire]

Reply

Marsh Posté le 11-07-2003 à 10:42:21    

lorill a écrit :


 

Code :
  1. class MyFile
  2. {
  3. private byte[] data;
  4. public MyFile(data); //ou filename  
  5. long computeCRC32();
  6. }

 
 
et vu que tu touches pas au pointeurs, ca sera pas garbagé tant que t'aura l'instance de MyFile, vu que y'a une reference sur data.
 
et c'est pas plus dangereux que de passer un pointeur null a ta methode statique  [:sinclaire]  


 
J'ai precisé en c++ [:cupra]  
Un pointeur null je peux le voir facilement au moment de l'encodage, mais un pointeur qui pointe sur un truc qui a ete deleté, la c une autre paire de manche
 
Pis a l'usage c quand meme + lourd :O et si par hasard ma classe de CRC32 traine dans un coin et que le dernier CRC portait sur 20Mo de donnee ben j'ai l'air con [:ddr555]
 
 
 
 

Reply

Marsh Posté le 11-07-2003 à 10:45:03    

chrisbk a écrit :


Pis a l'usage c quand meme + lourd :O  


si tu laisses ton *data dans la nature, j'en conviens. Si tu l'encapsule correctement dans une classe, ben rajouter un computeCRC32 comme methode de cette classe, c'est pas vraiment plus lourd.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed