Tout objet est une instance de classe instanciable (c'est-à-dire non abstraite) ou d'un tableau.
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 .
new C ( ... )
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 ( ... );
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 ];
..................
|
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.