Lorsque nous écrivons du code Java, le fichier source est nommé avec java comme suffixe. Une fois le fichier java compilé, il est nommé avec le suffixe .class Lorsque la machine virtuelle Java enregistre les fichiers de classe, ces fichiers sont enregistrés. doit être dans la machine virtuelle avec le suffixe .class. Une certaine structure de données existe pour représenter les différentes structures et données de la classe correspondante. Ensuite, cette forme structurelle est l'objet Class, qui est une description de la Classe et de la classe. L'objet est le résultat de l'instanciation de l'objet Class. Il n'y aura qu'une seule copie de l'objet Class dans la JVM (chargée par le même ClassLoader et placée dans la zone mémoire fixe de la JVM, et le GC ne le gérera pas. il), mais il peut y avoir plusieurs objets d'instance différents
Une méthode de classe doit dépendre d'une instance spécifique avant de pouvoir être appelée (sauf pour les méthodes statiques), car elle dépend des données et de l'état de l'instance spécifique~~~
Objets de classe Les objets de classe et de méthode Les méthodes sont également des objets et ont leurs propres propriétés et méthodes. Ce n'est que lorsqu'une classe est instanciée en tant qu'objet que la méthode d'instance de l'objet peut être appelée. L'objet Class est une instance de la classe Class.
1. Je ne peux pas l'expliquer clairement 2. Cette méthode est une méthode membre. Elle ne peut pas être appelée s'il n'y a pas d'objet instancié. S'il s'agit d'une méthode statique, elle n'est pas nécessaire.
Class est un objet de classe, qui hérite bien sûr également de Object. Cet objet de classe est assez différent d'un objet d'instance spécifique. Généralement, une classe n'a qu'un seul objet de classe, que l'on peut obtenir via Just.class (c'est une des méthodes, il y a presque trois méthodes) . Plusieurs objets d'instance peuvent être créés à l'aide de new ou newInstance. Il est recommandé au sujet de lire les connaissances introductives à la réflexion, puis de comprendre par lui-même la notion d'objets de classe, qui est la base de la réflexion.
Tout d'abord, Class est utilisé pour extraire les informations de classe. Java est orienté objet. Par exemple, la classe de personne, Person, peut extraire des informations telles que le nom, le sexe, l'âge, etc. classes, abstraction de classe de Java Elle est devenue la classe Class, qui résumait des informations telles que le nom du package, le nom de la classe, le tableau d'attributs, le tableau de méthodes, etc. Il s'agit d'un niveau d'abstraction supérieur. Cela facilite la compréhension de la réflexion, Class<?> c = Just.class; c voici un objet de Class. Cette instance d'objet contient la classe Just, mais si vous souhaitez obtenir une instance de la classe Just. , vous devez simplement également appeler la méthode c.newInstance().
Vous avez 2 questions ici : La première concerne la relation entre les instances et les classes. C'est comme la relation entre un moule et un produit. Par exemple, nous utilisons un moule à gâteau pour faire des gâteaux, c'est comme une classe. Un gâteau est produit en le pressant avec le moule. Idem. Il s'agit du produit ; la fonction du moule est de rendre la taille et les autres attributs de chaque gâteau identiques. Le concept de réflexion est plus complexe. Il décrit que même le moule lui-même a des attributs, tels que la taille et la profondeur du moule, et que la classe elle-même est similaire. Quelles méthodes et attributs cette classe a-t-elle ? Si vous connaissez ces choses, vous pouvez instancier dynamiquement des objets. Une fois que je sais ce que font les attributs de ce moule, je peux aussi produire dynamiquement des gâteaux et appeler la méthode de ce gâteau La deuxième question : Parce que l'utilisation de la réflexion nécessite également l'instanciation d'objets, bien que new ne soit pas utilisé, il en a quand même besoin ; pour être instancié. Il doit être instancié, sinon un pointeur nul sera signalé.
Je vois que les problèmes ont été résolus, mais je souhaite quand même ajouter quelque chose au niveau de la structure de la mémoire.
Jetons un coup d'œil à la structure de la mémoire tas de l'instance :
Autrement dit, chaque instance d'objet se compose de 4 parties dans la mémoire du tas. Concentrez-vous sur le mot de marque (mot de marque) et le pointeur d'instance Class Le mot de marque indique s'il y a un verrou, un indicateur GC, un GC jeunesse. horaires, etc. informations.
L'instance
Class représente une classe qui a été chargée dans jvm par Classloader. Elle stocke les informations de description, le nom de la classe, le nom du champ et les informations de méthode de cette classe.
Le problème de l'affiche est donc clair. Une instance Class ne représente que les informations de description de la classe. Elle n'est pas égale à l'instance de la classe, et chaque instance contiendra une référence de pointeur vers l'instance Class.
1. Ouvrez un espace mémoire de tas 2. Appelez le constructeur sans argument de la classe correspondante 3. Demandez l'adresse de la pile et pointez l'adresse de référence vers cet espace mémoire de tas
De plus, l'instanciation de Class est effectuée par la méthode classloader de define().
Lorsque nous écrivons du code Java, le fichier source est nommé avec java comme suffixe. Une fois le fichier java compilé, il est nommé avec le suffixe .class
Lorsque la machine virtuelle Java enregistre les fichiers de classe, ces fichiers sont enregistrés. doit être dans la machine virtuelle avec le suffixe .class. Une certaine structure de données existe pour représenter les différentes structures et données de la classe correspondante. Ensuite, cette forme structurelle est l'objet Class, qui est une description de la Classe
et de la classe. L'objet est le résultat de l'instanciation de l'objet Class. Il n'y aura qu'une seule copie de l'objet Class dans la JVM (chargée par le même ClassLoader et placée dans la zone mémoire fixe de la JVM, et le GC ne le gérera pas. il), mais il peut y avoir plusieurs objets d'instance différents
Une méthode de classe doit dépendre d'une instance spécifique avant de pouvoir être appelée (sauf pour les méthodes statiques), car elle dépend des données et de l'état de l'instance spécifique~~~
Objets de classe Les objets de classe et de méthode Les méthodes sont également des objets et ont leurs propres propriétés et méthodes.
Ce n'est que lorsqu'une classe est instanciée en tant qu'objet que la méthode d'instance de l'objet peut être appelée. L'objet Class est une instance de la classe Class.
Un objet Class n'est pas la classe elle-même, il peut être considéré comme une interface utilisée pour accéder à la classe elle-même.
L'appel d'une méthode d'instance nécessite une instance de cette classe. Lorsque vous invoquez une méthode statique, vous pouvez transmettre null.
1. Je ne peux pas l'expliquer clairement
2. Cette méthode est une méthode membre. Elle ne peut pas être appelée s'il n'y a pas d'objet instancié. S'il s'agit d'une méthode statique, elle n'est pas nécessaire.
Class
est un objet de classe, qui hérite bien sûr également deObject
. Cet objet de classe est assez différent d'un objet d'instance spécifique. Généralement, une classe n'a qu'un seul objet de classe, que l'on peut obtenir viaJust.class
(c'est une des méthodes, il y a presque trois méthodes) . Plusieurs objets d'instance peuvent être créés à l'aide denew
ounewInstance
.Il est recommandé au sujet de lire les connaissances introductives à la réflexion, puis de comprendre par lui-même la notion d'objets de classe, qui est la base de la réflexion.
La classe est l'abstraction des objets, et l'objet est l'abstraction des choses objectives
Tout d'abord, Class est utilisé pour extraire les informations de classe. Java est orienté objet. Par exemple, la classe de personne, Person, peut extraire des informations telles que le nom, le sexe, l'âge, etc. classes, abstraction de classe de Java Elle est devenue la classe Class, qui résumait des informations telles que le nom du package, le nom de la classe, le tableau d'attributs, le tableau de méthodes, etc. Il s'agit d'un niveau d'abstraction supérieur.
Cela facilite la compréhension de la réflexion, Class<?> c = Just.class; c voici un objet de Class. Cette instance d'objet contient la classe Just, mais si vous souhaitez obtenir une instance de la classe Just. , vous devez simplement également appeler la méthode c.newInstance().
Vous avez 2 questions ici :
La première concerne la relation entre les instances et les classes. C'est comme la relation entre un moule et un produit. Par exemple, nous utilisons un moule à gâteau pour faire des gâteaux, c'est comme une classe. Un gâteau est produit en le pressant avec le moule. Idem. Il s'agit du produit ; la fonction du moule est de rendre la taille et les autres attributs de chaque gâteau identiques. Le concept de réflexion est plus complexe. Il décrit que même le moule lui-même a des attributs, tels que la taille et la profondeur du moule, et que la classe elle-même est similaire. Quelles méthodes et attributs cette classe a-t-elle ? Si vous connaissez ces choses, vous pouvez instancier dynamiquement des objets. Une fois que je sais ce que font les attributs de ce moule, je peux aussi produire dynamiquement des gâteaux et appeler la méthode de ce gâteau
La deuxième question : Parce que l'utilisation de la réflexion nécessite également l'instanciation d'objets, bien que new ne soit pas utilisé, il en a quand même besoin ; pour être instancié. Il doit être instancié, sinon un pointeur nul sera signalé.
Je vois que les problèmes ont été résolus, mais je souhaite quand même ajouter quelque chose au niveau de la structure de la mémoire.
Jetons un coup d'œil à la structure de la mémoire tas de l'instance :
Autrement dit, chaque instance d'objet se compose de 4 parties dans la mémoire du tas. Concentrez-vous sur le mot de marque (mot de marque) et le pointeur d'instance
L'instanceClass
Le mot de marque indique s'il y a un verrou, un indicateur GC, un GC jeunesse. horaires, etc. informations.Class
représente une classe qui a été chargée dans jvm parClassloader
. Elle stocke les informations de description, le nom de la classe, le nom du champ et les informations de méthode de cette classe.Le problème de l'affiche est donc clair. Une instance
Class
ne représente que les informations de description de la classe. Elle n'est pas égale à l'instance de la classe, et chaque instance contiendra une référence de pointeur vers l'instanceClass
.Habituellement, appeler
Class.newInstance()
fera 3 choses :1. Ouvrez un espace mémoire de tas
2. Appelez le constructeur sans argument de la classe correspondante
3. Demandez l'adresse de la pile et pointez l'adresse de référence vers cet espace mémoire de tas
De plus, l'instanciation de
Class
est effectuée par la méthodeclassloader
dedefine()
.