Heim  >  Artikel  >  Java  >  Detaillierte Erläuterung des Java-Klassenlademechanismus ClassLoder (Bild und Text)

Detaillierte Erläuterung des Java-Klassenlademechanismus ClassLoder (Bild und Text)

黄舟
黄舟Original
2017-03-15 13:11:552043Durchsuche

Nachdem ich es auf Papier gelesen habe, wird mir klar, dass ich es im Detail machen muss --Lu You Fragen Sie den Kanal, wie klar er ist, damit es eine Quelle lebendigen Wassers gibt – Zhu Xi


Das gesamte Leben einer Klasse vom Zeitpunkt des Ladens in den Speicher bis Die Zeit, in der es aus dem Speicher entladen wird. Der Zyklus umfasst: Laden, Überprüfung (Verification), Vorbereitung (Preparetation), Auflösung (Resolution),

Initialisierung (Initialization) und verwenden (Using), sieben Stufen des Entladens (Uploading). Wobei die Vorbereitung und Analyse der Validierung als Verknüpfung bezeichnet wird.





1 Die geladene Architektur

1), Bootstrap Classloader startet den Klassenlader, der hauptsächlich für die Kern-APIOder das durch die Option -Xbootstrap angegebene JAR-Paket ist im Job enthalten. 2), Extension ClassLoader, Erweiterungsklassenlader, hauptsächlich verantwortlich für das JAR-Paket unter java_home/lib/ext

3), App CLassLoader Systemklassenlader, hauptsächlich verantwortlich für Java -classpath/ Der Laden von Klassen und JAR-Paketen im Verzeichnis

4), UserCustom ClassLoader, benutzerdefinierter Klassenlader, während der Ausführung des Programms, über die untergeordnete Klasse Java.

lang

.Classloader dynamische Ladeklasse

2. Merkmale des Klassenladens

1), jeder ClassLoader verwaltet seinen eigenen

Namespace

, zwei identische Klassennamen dürfen nicht im selben Namespace erscheinen

2), Um Java

Sicherheit

SandboxModellTop-Level-Klassen-Loader-Sicherheitsmechanismus zu erreichen, Java übernimmt standardmäßig die Struktur „Parent-Delegated Loading Chain“. 3. Es gibt drei Möglichkeiten, Klassen zu laden:

1). und von der JVM geladen.

2), dynamisches Laden durch die Klasse.

for

Name()-Methode. 3), dynamisches Laden durch die Methode ClassLoader().loadClass().

Diese drei Lademethoden haben Auswirkungen auf die Ausführung von

statischen

Codeblöcken.

Das folgende Beispiel:

public class MyHello {    static    {
        System.out.println("hello word");    }
}public class Hello {    public static void main(String[] args) {
        ClassLoader loader=Hello.class.getClassLoader();        
        try {            
        //静态代码块不运行            
        //loader.loadClass("Test.MyHello");            
        //静态代码块运行输出hello world            
        //Class.forName("Test.MyHello");            
        //静态代码块不运行            
        //Class.forName("Test.MyHello", false, loader);            
        //静态代码块运行输出hello world            
        Class.forName("Test.MyHello", true, loader);        
        } 
        catch (ClassNotFoundException e) {            
        // TODO 自动生成的 catch 块            
        e.printStackTrace();       
         }
    }
}

1. ClassLoader-Klassenladearchitektur

1) Bootstrap Classloader startet den Klassenlader, der hauptsächlich für das Laden der Kern-API unter java_home/lib oder des durch die Option -Xbootstrap angegebenen JAR-Pakets verantwortlich ist.

2), Extension ClassLoader, Erweiterungsklassenlader, hauptsächlich verantwortlich für das JAR-Paket unter java_home/lib/ext

3), App CLassLoader Systemklassenlader, hauptsächlich verantwortlich für Java -classpath/ Laden von Klassen und JAR-Paketen im Verzeichnis;

4), UserCustom ClassLoader, benutzerdefinierter Klassenlader, lädt während der Ausführung des Programms dynamisch Klassen über Unterklassen von Java.lang.Classloader

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Java-Klassenlademechanismus ClassLoder (Bild und Text). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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