[java]Connaitre le nombre d'instance créées d'une même classe?

Connaitre le nombre d'instance créées d'une même classe? [java] - Java - Programmation

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?

Reply

Marsh Posté le 21-05-2003 à 14:13:36   

Reply

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.


---------------
Light is right
Reply

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 ??  :??:

Reply

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  :jap:  
sans oublier d'initialiser la variable à zéro :D


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

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 ? :D


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

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.


---------------
Light is right
Reply

Marsh Posté le 21-05-2003 à 14:36:41    

Tetragrammaton IHVH a écrit :


 
heureusement que oui sinon comment feraient les programmes pour ne pas exploser la mémoire ? :D

ça c'est le boulot du GC, rien à voir avec le dstructeur

Reply

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 ?  :sarcastic:  
Le GC appelle la méthode finalize() qui est l'équivalent d'un destructeur


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 21-05-2003 à 14:42:18    

Tetragrammaton IHVH a écrit :


 
T'as déjà fait du java dans ta vie ?  :sarcastic:  
Le GC appelle la méthode finalize() qui est l'équivalent d'un destructeur  

c'est p-e équivalent, mais ce n'est pas un destructeur
impossible de savoir quand il sera effectivement appelé

Reply

Marsh Posté le 21-05-2003 à 14:46:30    

Tetragrammaton IHVH a écrit :


 
T'as déjà fait du java dans ta vie ?  :sarcastic:  
Le GC appelle la méthode finalize() qui est l'équivalent d'un destructeur  


 
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!

Reply

Marsh Posté le 21-05-2003 à 14:46:30   

Reply

Marsh Posté le 21-05-2003 à 14:46:44    

noldor a écrit :

c'est p-e équivalent, mais ce n'est pas un destructeur
impossible de savoir quand il sera effectivement appelé


Bah moi j'appelle ca un destructeur, etant donné qu'elle est appelée lorsque l'objet est effectivement effacé de la mémoire...


---------------
Light is right
Reply

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é?

Reply

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 !

Reply

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.


---------------
Light is right
Reply

Marsh Posté le 21-05-2003 à 14:52:05    

Nerisson a écrit :


Bah moi j'appelle ca un destructeur, etant donné qu'elle est appelée lorsque l'objet est effectivement effacé de la mémoire...


 
bah vi [:spamafote]
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.


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 21-05-2003 à 14:58:34    

El_gringo a écrit :


 
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 !


 
oui mai smoi a chaque creation jai recuperer ce numero donc pour chaque instance j'ai un numero qui lui est propre.

Reply

Marsh Posté le 21-05-2003 à 14:59:37    

Astro a écrit :


 
oui mai smoi a chaque creation jai recuperer ce numero donc pour chaque instance j'ai un numero qui lui est propre.


 
tu ajoutes une variable membre dans la classe que tu initialises dans le constructeur avec le compteur statique.


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 21-05-2003 à 15:07:43    

Astro a écrit :


 
oui mai smoi a chaque creation jai recuperer ce numero donc pour chaque instance j'ai un numero qui lui est propre.


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 ?


---------------
Light is right
Reply

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

Reply

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.....


Message édité par Feanor le 21-05-2003 à 15:46:04
Reply

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
Questions 4 et 5.
Voila l'url :
http://dept-info.labri.u-bordeaux. [...] ept-00.pdf


'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.


Message édité par nerisson le 21-05-2003 à 15:24:13

---------------
Light is right
Reply

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)

Reply

Marsh Posté le 21-05-2003 à 16:15:27    

Feanor a écrit :


Code :
  1. public class Chaine {
  2.     private final String nom;
  3.     public Chaine(String nom) {
  4. this.nom = nom;
  5.     }
  6.     public String nom() {
  7. return nom;
  8.     }
  9.     public static void main (String[] args) {
  10. if (args.length==1) {
  11.     Chaine c = new Chaine(args[0]);
  12.     System.out.println ( "la chaine est : "+c.nom);
  13. }
  14.     }
  15. }


 
ben ouais ca marche je pensais que final ct pour l'optimisation,qu'apres on pouvais plus toucher a la reference car les methodes etaient 'hard wired' par le compilo.....
 
on m'aurait menti ???


 
 
edit :

Code :
  1. public void change(String nouvelle) {
  2. nom= nouvelle;
  3.     }


 
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 ?)

Reply

Marsh Posté le 22-05-2003 à 16:15:55    

Nerisson a écrit :


Bah moi j'appelle ca un destructeur, etant donné qu'elle est appelée lorsque l'objet est effectivement effacé de la mémoire...


En C++, lorsque l'objet est alloué par le compilateur, il est détruit lorsqu'on sort de sa portée. Exemple :

Code :
  1. {
  2.    Integer  n = 2;   // Un objet de type Integer est alloué.
  3.    ...
  4. } // L'objet de type Integer devient inaccessible => il est détruit et désalloué.


 
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.


Message édité par BifaceMcLeOD le 22-05-2003 à 16:17:00
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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