Connaitre le nombre d'instance créées d'une même classe? [java] - Java - Programmation
Marsh Posté le 21-05-2003 à 14:20:24
Ajoute une variable statique dans ta classe, incremente la dans le constructeur, decremente la dans le destructeur.
Marsh Posté le 21-05-2003 à 14:22:48
Nerisson a écrit : Ajoute une variable statique dans ta classe, incremente la dans le constructeur, decremente la dans le destructeur. |
y a pas de destructeur en java, si ??
Marsh Posté le 21-05-2003 à 14:24:11
Nerisson a écrit : Ajoute une variable statique dans ta classe, incremente la dans le constructeur, decremente la dans le destructeur. |
pas mieux
sans oublier d'initialiser la variable à zéro
Marsh Posté le 21-05-2003 à 14:25:14
noldor a écrit : y a pas de destructeur en java, si ?? |
heureusement que oui sinon comment feraient les programmes pour ne pas exploser la mémoire ?
Marsh Posté le 21-05-2003 à 14:30:13
noldor a écrit : y a pas de destructeur en java, si ?? |
la methode finalize fait office de destructeur.
Marsh Posté le 21-05-2003 à 14:36:41
Tetragrammaton IHVH a écrit : |
ça c'est le boulot du GC, rien à voir avec le dstructeur
Marsh Posté le 21-05-2003 à 14:41:01
noldor a écrit : ça c'est le boulot du GC, rien à voir avec le dstructeur |
T'as déjà fait du java dans ta vie ?
Le GC appelle la méthode finalize() qui est l'équivalent d'un destructeur
Marsh Posté le 21-05-2003 à 14:42:18
Tetragrammaton IHVH a écrit : |
c'est p-e équivalent, mais ce n'est pas un destructeur
impossible de savoir quand il sera effectivement appelé
Marsh Posté le 21-05-2003 à 14:46:30
Tetragrammaton IHVH a écrit : |
Ben, non, c'est pas pareil. Un destructeur, ça détruit l'instance. La méthode finalize est appelée au moment de la destruction par le GC. On ne l'appelle pas explicitement. ça change tout!
Marsh Posté le 21-05-2003 à 14:46:44
noldor a écrit : c'est p-e équivalent, mais ce n'est pas un destructeur |
Bah moi j'appelle ca un destructeur, etant donné qu'elle est appelée lorsque l'objet est effectivement effacé de la mémoire...
Marsh Posté le 21-05-2003 à 14:47:26
merci je viens de trouver et effectivement j'ai fait comme ca, par contre un autre truc comment on peut faire pour recuperer l'instance correspondant à son numero associé?
Marsh Posté le 21-05-2003 à 14:48:50
Astro a écrit : merci je viens de trouver et effectivement j'ai fait comme ca, par contre un autre truc comment on peut faire pour recuperer l'instance correspondant à son numero associé? |
En faisant comme on t'as dit, chaque instance n'a pas de n° associé.
Une variable de classe t'indique le nombre d'instances en cours de cette classe, c'est tout !
Marsh Posté le 21-05-2003 à 14:49:07
Astro a écrit : merci je viens de trouver et effectivement j'ai fait comme ca, par contre un autre truc comment on peut faire pour recuperer l'instance correspondant à son numero associé? |
Bah ce n'est pas possible.
Tu veux associer un numero à un objet ? -> tableau ou liste.
Marsh Posté le 21-05-2003 à 14:52:05
Nerisson a écrit : |
bah vi
la seule différence entre delete et finalize() c'est que delete rend libre la zone mémoire alors que c'est le GC qui fait ce travail (au petit bonheur la chance).
Mais le "ménage" à faire dans la classe (effacement d'objets etc...) se fait dans le finalize() en java comme dans un destructeur en C++. Et donc le décomptage du nombre d'instances d'une classe est à placer dans le finalize(). Tout est dit.
Marsh Posté le 21-05-2003 à 14:58:34
El_gringo a écrit : |
oui mai smoi a chaque creation jai recuperer ce numero donc pour chaque instance j'ai un numero qui lui est propre.
Marsh Posté le 21-05-2003 à 14:59:37
Astro a écrit : |
tu ajoutes une variable membre dans la classe que tu initialises dans le constructeur avec le compteur statique.
Marsh Posté le 21-05-2003 à 15:07:43
Astro a écrit : |
Nan Nan Nan !!! Le numéro n'est pas unique ! Si tu veux un numéro unique il ne faut pas décrementer la variable statique.
Ca m'a l'air assez bizarre ce que tu veut faire, tu ne vaut pas nous en dire plus ?
Marsh Posté le 21-05-2003 à 15:13:26
en fait c un sujet d'exam de licence que je lis et je pige pas comment faire ce truc en question
Questions 4 et 5.
Voila l'url :
http://dept-info.labri.u-bordeaux. [...] ept-00.pdf
Marsh Posté le 21-05-2003 à 15:22:02
<polution>
euhhhh c quoi la reponse a la question 1 ?
</pollution>
edit : je veux vraiment savoir la reponse ... parce que en private c deja inacessible par toute methode externe, donc le mec veut que la chaine ne puisse pas etre changee.....
Marsh Posté le 21-05-2003 à 15:23:52
Astro a écrit : en fait c un sujet d'exam de licence que je lis et je pige pas comment faire ce truc en question |
'tain le truc de ouf !
Si tu dois tout mettre dans une seule classe, parce-que moi j'aurais créé une factory pour gérer tout ca.
Sinon je pense que la meilleure solution est de mettre une ArrayList comme variable statique, dans laquelle tu stockes les instances des classes Direction.
Marsh Posté le 21-05-2003 à 15:56:40
>Feanor : private final
Mais du coup, je me demande si l'initialisation dans le constructeur marche.
Pour la question 4:
Une solution serait de mettre un ArrayList statique d'instances crées avec une méthode statique pour trouver la direction en fonction du numéro.
Pour le problème de trouver le numéro et du destructeur: l'énoncé indique 'nombre d'instances crées' et pas 'nombre d'instances en mémoire'. Donc il n'y a peut-être pas besoin de surveiller finalize ou autre chose.
Par contre, le principe de mettre tout statique, c'est pas top. Il vaudrait mieux faire une classe 'DirectionManager' par exemple, qui contient le tableau et qui est responsable de la création des instances (sert de factory)
Marsh Posté le 21-05-2003 à 16:15:27
Feanor a écrit :
|
edit :
Code :
|
si on ajoute ca le compilo rale...la question viens sans doute parce que le prof a du insister pour montrer la difference entre le const du C et le final du java.....
(rassurez moi un const membre d'une classe on peut pas le virer ?)
Marsh Posté le 22-05-2003 à 16:15:55
Nerisson a écrit : |
En C++, lorsque l'objet est alloué par le compilateur, il est détruit lorsqu'on sort de sa portée. Exemple :
Code :
|
En Java, lorsque l'objet devient inaccessible, il est marqué comme inaccessible, mais il existe toujours pour le système, alors même qu'il n'existe plus pour le programme. Le moment où il sera effectivement détruit et désalloué par le système est imprévisible, et entièrement géré par le ramasse-miettes.
Voilà pourquoi finalize() n'est pas un destructeur à proprement parler : parce qu'un vrai destructeur est appelé lorsque l'objet cesse d'exister pour le programme. Et en Java, ce moment est impossible à déterminer.
Marsh Posté le 21-05-2003 à 14:13:36
J'ai une classe MachinChose
En fait j'aimerais qu'a chaque instance créée de cette classe soit asspcié un entier compris entre 0 et le nombre total d'instances crées -1.
Comment on fait pour connaitre le nombre d'instance deja créées?