Naissance et mort des objets

Les objets

Tout objet est une instance de classe instanciable (c'est-à-dire non abstraite) ou d'un tableau.


Instanciation de classe et création d'un objet

La création d'un objet, correspondant à l'instanciation de la classe ou du tableau correspondant, est réalisée au moyen d'un constructeur appelé au travers de l'opérateur  new .


Intéressons-nous tout d'abord à la création d'un objet instantiant une classe C


Une telle instanciation correspond à l'expression suivante :
             new C ( ... )
qui appelle le
constructeur de la classe C de profil spécifié.

Une telle expression a comme type C, a comme valeur une référence (c'est-à-dire une adresse en mémoire) sur C et, en tant que telle, peut être affectée directement à une variable de type CC sur-classe quelconque (directe ou indirecte) de C :

     CC refCC;     // Object <-- ... <-- CC <-- ... <-- C
     refCC = new C ( ... ) ;

ou encore, le tout en une seule fois :

     CC refCC = new C ( ... );


D'un point de vue pratique, l'effet de cette instanciation est de Au passage il faut noter que les variables de classe, c'est-à-dire les variables de la classe portant la spécification static, ne sont pas concernées : elles sont allouées une fois pour toutes lors du chargement de la classe.

               ..................
   T refSimple; // refSimple est une référence de type T
   // refTableau1 est une référence de tableau à 1 dimension d'objets de type T    
   T[ ] refTableau1;
   // refTableau2 est une référence de tableau à 2 dimensions d'objets de type T 
   T[ ][ ] refTableau2;
   // instanciation de T avec initialisation via un constructeur 
   refSimple = new T ( ... );
   // instanciation d'un tableau de entier références sur T 
   refTableau1 = new T [ entier ];
   // instanciation d'un tableau à deux dimensions de références sur T
   refTableau2 = new T [ entier1 ] [ entier2 ];
               ..................

Mort d'un objet

Un objet disparaît lorsque plus aucune référence sur lui n'existe. L'espace qu'il occupe en mémoire peut alors être récupéré.
Contrairement à ce qui se passe par exemple en C ou C++, la récupération de l'espace memoire (et donc la destruction des objets) n'est pas à la charge de l'utilisateur. En Java, il n'existe pas d'opérateur du type free ou release réalisant explicitement la destruction d'un objet. La machine virtuelle se charge de cette opération (ramasse-miettes/garbage collecting) qui est donc complètement transparente pour les développeurs.



Dernière mise à jour : 16 juin 2005

Valid XHTML 1.0! Valid CSS!