Cours jsp
Cours 9 - PC2R - UPMC - 2006/2007 – p. 1/6
Chargeur de classes utilisateur classe abstraite java.lang.ClassLoader : charger le byte-code : méthode : byte [] loadClassData (String) définir un objet Class à partie de cette suite d’octets : méthode : Class defineClass(byte [], int,int) faire l’édition de liens : méthode : resolveClass(Class) la méthode Class loadClass(String,bool) effectue ces tâches.
Cours 9 - PC2R - UPMC - 2006/2007 – p. 2/6
Chargement
La machine virtuelle Java charge dynamiquement les classes dont l’exécution du programme en cours a besoin. L’option -verbose de l’interprète de byte-code de la machine abstraite Java. Habituellement la machine virtuelle Java charge une classe à partir d’un fichier local. Ce chargement peut être dépendant du système (variable CLASSPATH sous Unix, . . . ). Néanmoins il peut avoir des situations où les classes doivent être chargées de manière différentes : classes distantes (accessibles à partir d’un serveur sur le réseau), format de fichier spécifique, conversion à la volée, modification de la sécurité. Pour ces cas, il est nécessaire de définir une sous-classe de la classe abstraite ClassLoader pour étendre le comportement de chargement.
Cours 9 - PC2R - UPMC - 2006/2007 – p. 3/6
Exemple (1)
L’exemple suivant, tiré du tutorial de Java, montre comment créer un chargeur de classes pour le réseau. La classe NetworkClassLoader définit deux méthodes : loadClassData qui d’une URL retourne un tableau d’octets correspondant au code transmis
et loadClass (seule méthode abstraite de la classe ClassLoader) pour le chargement effectif. Elle contient d’autre part une table de hachage pour connaître les classes déjà transférées. loadClass vérifie si le nom de la méthode est déjà dans la table de hachage, si ce n’est
pas le cas, elle transfère les données et construit la classe à partir d’un tableau d’octets, stocke la classe dans la