Methode et champs static [java] - Java - Programmation
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 :
|
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. |
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
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 ?
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. |
Tu vois les variables globales en C ?
Ben c'est pareil c'est mal !
Marsh Posté le 13-06-2003 à 00:59:44
nraynaud a écrit : Tu vois les variables globales en C ? |
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++.
Marsh Posté le 13-06-2003 à 08:24:30
deltaden 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
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).
Marsh Posté le 13-06-2003 à 08:46:35
DarkLord a écrit : |
Une classe statique !? J'connais même pas ! J'comprend pas bien à quoi ça peut correspondre...
Marsh Posté le 13-06-2003 à 08:47:12
El_gringo a écrit : |
bin que des méthodes statiques dedans quoi
Marsh Posté le 13-06-2003 à 08:47:57
El_gringo a écrit : |
C'est une javasserie
http://www.javaworld.com/javaworld [...] atic2.html
Marsh Posté le 13-06-2003 à 08:48:48
kadreg a écrit : |
kadreg
Marsh Posté le 13-06-2003 à 08:49:00
DarkLord 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 ?
Marsh Posté le 13-06-2003 à 08:49:49
El_gringo a écrit : |
non et sinon kadreg a répondu mieux que moi en fait
Marsh Posté le 13-06-2003 à 08:54:04
ReplyMarsh Posté le 13-06-2003 à 08:57:35
El_gringo a écrit : |
ta gueule
si t'es pas content c'est le même prix
Marsh Posté le 13-06-2003 à 09:12:02
DarkLord a écrit : |
Ho, Dark, c'est si bon toute cette douceur...
Marsh Posté le 13-06-2003 à 09:23:24
El_gringo a écrit : |
n'est-ce-pas?
Marsh Posté le 13-06-2003 à 09:39:31
DarkLord 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
Marsh Posté le 13-06-2003 à 09:41:26
Taiche a écrit : |
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
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 |
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++.
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.
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
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 |
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é.
Marsh Posté le 11-07-2003 à 09:15:34
krosso a écrit : |
c'est pas OO
Si tu t'en fous d'avoir un desing OO propre bin alors fais le
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
Marsh Posté le 11-07-2003 à 09:28:14
DarkLord a écrit : |
Marsh Posté le 11-07-2003 à 10:14:02
krosso a écrit : |
DarkLord 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 !(?)
Marsh Posté le 11-07-2003 à 10:19:00
El_gringo 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?
Marsh Posté le 11-07-2003 à 10:23:06
DarkLord a écrit : |
El_gringo a écrit : |
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
Marsh Posté le 11-07-2003 à 10:25:18
DarkLord a écrit : |
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 ...
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)
Marsh Posté le 11-07-2003 à 10:28:17
DarkLord a écrit : |
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 :
|
En quoi c pas OO ca ? je fais comment pour que ca soit OO ?
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 ?
Marsh Posté le 11-07-2003 à 10:32:53
chrisbk a écrit :
|
Code :
|
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.
Marsh Posté le 11-07-2003 à 10:35:02
lorill 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
Marsh Posté le 11-07-2003 à 10:38:34
chrisbk a écrit : |
Code :
|
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
Marsh Posté le 11-07-2003 à 10:42:21
lorill a écrit :
|
J'ai precisé en c++
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 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
Marsh Posté le 11-07-2003 à 10:45:03
chrisbk a écrit : |
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.
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