Heim > Java > javaLernprogramm > Erweiterte Java-Reflektion

Erweiterte Java-Reflektion

黄舟
Freigeben: 2017-02-24 09:47:47
Original
1365 Leute haben es durchsucht


Wir verwenden normalerweise Reflexion Der erste Weg, werfen wir zunächst einen Blick auf Class.forName(clssName):
Hinweis: Der eingehende Klassenname muss seinDer vollständige Pfad der Klasse , andernfalls wird ein Fehler java.lang.ClassNotFoundException gemeldet.

public static Class<?> forName(String className)                
throws ClassNotFoundException {        
return forName0(className, true, ClassLoader.getCallerClassLoader());
    }
Nach dem Login kopieren
Nach dem Login kopieren

Durch Aufrufen der forName0-Methode können Sie mit ClassLoader.getCallerClassLoader() den ClassLoader laden.

    // 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();
    }
Nach dem Login kopieren
Nach dem Login kopieren

Rufen Sie claser.getClassLoader0() auf, um den ClassLoader abzurufen Da es sich um ein privates Paket handelt, können Sicherheitskontrollen vermieden werden.

 // Package-private to allow ClassLoader access
    native ClassLoader getClassLoader0();
Nach dem Login kopieren
Nach dem Login kopieren

1. Was ist ClassLoader?

Wir verwenden normalerweise Reflection Der erste Weg, schauen wir uns zunächst Class.forName(clssName) an:
Hinweis: Der eingehende Klassenname muss der vollständige Pfad der -Klasse sein, andernfalls wird ein Fehler java.lang.ClassNotFoundException gemeldet.

public static Class<?> forName(String className)                
throws ClassNotFoundException {        
return forName0(className, true, ClassLoader.getCallerClassLoader());
    }
Nach dem Login kopieren
Nach dem Login kopieren

Durch Aufrufen der forName0-Methode können Sie mit ClassLoader.getCallerClassLoader() den ClassLoader laden.

    // 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();
    }
Nach dem Login kopieren
Nach dem Login kopieren

Rufen Sie claser.getClassLoader0() auf, um den ClassLoader abzurufen Da es sich um ein privates Paket handelt, können Sicherheitskontrollen vermieden werden.

 // Package-private to allow ClassLoader access
    native ClassLoader getClassLoader0();
Nach dem Login kopieren
Nach dem Login kopieren

1. Was genau ist ClassLoader?

Das Obige ist der Inhalt der erweiterten Reflexion in Java. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website .cn)!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage