Maison > Java > javaDidacticiel > Réflexion Java avancée

Réflexion Java avancée

黄舟
Libérer: 2017-02-24 09:47:47
original
1389 Les gens l'ont consulté


Nous utilisons généralement la réflexion La première méthode, jetons d'abord un coup d'œil à Class.forName(clssName) :
Remarque : le nom de classe entrant doit êtreLe chemin complet de la classe , sinon une erreur java.lang.ClassNotFoundException sera signalée.

public static Class<?> forName(String className)                
throws ClassNotFoundException {        
return forName0(className, true, ClassLoader.getCallerClassLoader());
    }
Copier après la connexion
Copier après la connexion

En appelant la méthode forName0, utilisez ClassLoader.getCallerClassLoader() pour charger le ClassLoader

    // Returns the invoker&#39;s class loader, or null if none.
    // NOTE: This must always be invoked when there is exactly one intervening
    // frame from the core libraries on the stack between this method&#39;s
    // invocation and the desired invoker.
    static ClassLoader getCallerClassLoader() {
        // NOTE use of more generic Reflection.getCallerClass()
        Class caller = Reflection.getCallerClass(3);
        // This can be null if the VM is requesting it        
        if (caller == null) {            
        return null;
        }
        // Circumvent security check since this is package-private        
        return caller.getClassLoader0();
    }
Copier après la connexion
Copier après la connexion

Appelez claser.getClassLoader0() pour obtenir le ClassLoader This. est un package privé, peut éviter les contrôles de sécurité.

 // Package-private to allow ClassLoader access
    native ClassLoader getClassLoader0();
Copier après la connexion
Copier après la connexion

1. Qu'est-ce que ClassLoader ?

Nous utilisons généralement la réflexion La première méthode, jetons d'abord un coup d'œil à Class.forName(clssName) :
Remarque : Le className transmis doit être le chemin complet de la classe , sinon une erreur java.lang.ClassNotFoundException sera signalée.

public static Class<?> forName(String className)                
throws ClassNotFoundException {        
return forName0(className, true, ClassLoader.getCallerClassLoader());
    }
Copier après la connexion
Copier après la connexion

En appelant la méthode forName0, utilisez ClassLoader.getCallerClassLoader() pour charger le ClassLoader

    // Returns the invoker&#39;s class loader, or null if none.
    // NOTE: This must always be invoked when there is exactly one intervening
    // frame from the core libraries on the stack between this method&#39;s
    // invocation and the desired invoker.
    static ClassLoader getCallerClassLoader() {
        // NOTE use of more generic Reflection.getCallerClass()
        Class caller = Reflection.getCallerClass(3);
        // This can be null if the VM is requesting it        
        if (caller == null) {            
        return null;
        }
        // Circumvent security check since this is package-private        
        return caller.getClassLoader0();
    }
Copier après la connexion
Copier après la connexion

Appelez claser.getClassLoader0() pour obtenir le ClassLoader This. est un package privé, peut éviter les contrôles de sécurité.

 // Package-private to allow ClassLoader access
    native ClassLoader getClassLoader0();
Copier après la connexion
Copier après la connexion

1. Qu'est-ce que ClassLoader exactement ?

Ce qui précède est le contenu de la réflexion avancée en Java. Pour plus de contenu connexe, veuillez prêter attention au site Web PHP chinois (www.php. .cn) !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal