1.loadClass, Lorsqu'une demande de chargement de classe arrive, recherchez d'abord l'objet de classe dans le cache.
S'il y en a un, il sera restitué directement. Dans le cas contraire, il sera remis au chargeur parent de ce type de chargement. S'il n'y a aucun parent à charger, il est chargé par le chargeur de démarrage de niveau supérieur. S'il n'est toujours pas trouvé, utilisez findClass() pour le charger ;
2. FindClass
Chargez le bytecode de la classe par nom ou position, puis utilisez DefineClass. Il est généralement implémenté par une sous-classe. personnaliser le ClassLoader, vous devez le réécrire la méthode.
3. La méthode DefineClass
defineClass() consiste à analyser le flux d'octets dans un objet Class qui peut être reconnu par la JVM (la logique de cette méthode a été implémentée dans ClassLoader). objets via des fichiers de classe, les objets Class peuvent également être instanciés via d'autres méthodes, par exemple, en recevant une classe de bytecode via le réseau, puis en la convertissant en un flux d'octets pour créer l'objet Class correspondant. La méthode DefinClass() est généralement utilisée ensemble. avec la méthode findClass(). Habituellement, lors de la personnalisation d'un chargeur de classe, vous remplacerez directement la méthode findClass() du Classloader et écrirez les règles de chargement. Après avoir obtenu le bytecode de la classe à charger, vous le convertirez en flux, et puis appelez la méthode definitionClass() pour générer l'objet Class de la classe. En termes simples, il s'agit de convertir le fichier classes en un objet Class.
4. solveClassAprès la création à l'aide de l'objet Class, il peut également être résolu en même temps.
Nous avons déjà dit que la phase de liaison vérifie principalement le bytecode, alloue de la mémoire, définit les variables de classe et convertit les références de symboles dans le fichier de bytecode en références directes.
1. Simple, tant que vous comprenez les concepts de base, vous pouvez écrire des applications adaptées à diverses situations 2. Orienté objet 3. Distribution, Java est un langage orienté réseau ; 4. Robustesse, Java fournit un garbage collection automatique pour la gestion de la mémoire, empêchant les programmeurs de commettre facilement des erreurs lors de la gestion de la mémoire. ; 5. Sécurité, Java utilisé dans les environnements réseau et distribués doit empêcher l'intrusion de virus. 6. Architecture neutre, tant que le système d'exécution Java est installé, il peut fonctionner sur n'importe quel processeur. 7. Portabilité, Java peut être facilement transplanté sur différentes machines du réseau. 8. Interprétation et exécution, l'interpréteur Java interprète et exécute directement le bytecode Java.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!