Nous avons déjà parlé du fait que les classes sont des types de données complexes. Parlons maintenant un peu de l'autre côté des classes — comment les classes sont gérées par la machine Java. Rappelez-vous qu'en Java tout est un objet, même une classe. Une classe est un objet. Cela vous surprend-il ? Alors continuons.
Charger une classe en mémoire
En fait, lorsqu'une classe est chargée en mémoire, trois "objets" spéciaux sont créés :
Brève description de l'illustration :
Rectangle jaune :
Le fichier de code est stocké sur le disque sous la forme d'un fichier avec l'extension ".class". Il contient des informations sur la classe, ses champs et ses méthodes, ainsi que le code source des méthodes compilées en bytecode.
Rectangle orange :
Lorsque la machine Java charge une classe en mémoire, elle compile le bytecode en code machine spécifique au processeur et au système d'exploitation de l'ordinateur. Seule la machine Java a accès à ce code machine. En tant que programmeurs Java, nous n'y avons pas accès.
Rectangle vert :
La machine Java crée un objet qui contient toutes les variables statiques et méthodes de la classe. Vous accédez à cet "objet" en utilisant le nom de la classe.
Par exemple, lorsque vous écrivez , vous faites référence à la variable statique située dans la classe. Cet objet est notre rectangle vert. Et c'est là que la variable statique est stockée.java.lang.Math.PI
PI
java.lang.Math
java.lang.Math
PI
Rectangle bleu :
Lorsque la machine Java charge le code d'une classe en mémoire, elle crée un objet spécial java.lang.Class
, qui stocke des informations sur la classe chargée : son nom, les noms des méthodes, les noms et types des champs, etc.
Le nom "Classe" peut être un peu déroutant. Il serait plus logique de l'appeler ClassInfo, car cette classe ne stocke que des informations sur la classe chargée.
Vous pouvez obtenir l'objet Class pour n'importe quel type à l'aide d'une commande comme celle-ci :
Class name = ClassName.class;
Exemples:
Code | Note |
---|---|
|
Obtenir un Class objet avec des informations sur la String classe |
|
Obtenir un Class objet avec des informations sur la Object classe |
|
Obtenir un Class objet avec des informations sur la Integer classe |
|
Obtenir un Class objet avec des informations sur le int type |
|
Obtenir un Class objet avec des informations sur le void type |
Vous pouvez également obtenir une référence à un objet de description de classe à partir de n'importe quel objet, puisque chaque objet a la getClass()
méthode, dont il hérite de la Object
classe.
Exemples:
Code | Note |
---|---|
|
Même objet queString.class |
|
Même objet queInteger.class |
|
Même objet queBoolean.class |
GO TO FULL VERSION