Dieser Artikel führt Sie hauptsächlich in die relevanten Informationen zur Java-Implementierung des stillen Ladens von Klassen ein. Der Artikel stellt es ausführlich anhand von Beispielcode vor. Es hat einen gewissen Referenz-Lernwert für alle, die es brauchen Folgen Sie unten. Lassen Sie uns gemeinsam lernen.
Vorwort
In diesem Artikel werden hauptsächlich relevante Inhalte zum stillen Laden von Java vorgestellt. Der Grund für diesen Artikel liegt darin, dass wir manchmal während der Entwicklung Wir haben ein Szenario, in dem wir nur die grundlegenden Informationen einer Klasse abrufen, aber nicht die relevanten statischen Codeblöcke auslösen möchten. Diese Methode wurde in einem früheren Artikel zum „JAVA-Scanning-Paket“ verwendet Es gibt einen professionellen Namen dafür, bitte korrigieren Sie mich.
Wenn wir eine Klasse laden, verwenden wir im Allgemeinen die Methode Class.forName(String name)
, die ein Klassenobjekt zurückgibt und den statischen Codeblock in der Klasse auslöst. Zum Beispiel:
Schreiben wir zunächst eine Bean-Klasse, die nur statische Codeblöcke enthält.
package com.jinggujin.classloader; public class Bean { static { System.err.println("static code block."); } }
Die Verwendung des Fehlerstroms dient dazu, Informationen rechtzeitig auszugeben, was zu einer Zwischenspeicherung führt, was dazu führen kann, dass die Ausgabeinformationen nicht in der richtigen Reihenfolge sind.
Dann schreiben Sie Testmethoden zum Testen.
package test; import org.junit.Test; public class ClassLoaderTest { @Test public void test() throws Exception { Class.forName("com.jinggujin.classloader.Bean"); } }
Führen Sie die Konsolenausgabe aus und beobachten Sie sie:
statischer Codeblock.
Zu diesem Zeitpunkt wird die Konsole ausgeführt Geben Sie uns aus Der im statischen Codeblock gedruckte Inhalt beweist, dass die Verwendung von Class.forName(String name)
den statischen Codeblock auslöst. Um ein stilles Laden zu erreichen, können wir diese Methode nicht verwenden. Diese Methode lädt nur die Klasse, ohne den statischen Codeblock auszulösen. Schreiben Sie dieselbe Testmethode zum Testen. loadClass(String name)
package test; import org.junit.Test; public class ClassLoaderTest { @Test public void test() throws Exception { Class<?> clazz = Thread.currentThread().getContextClassLoader().loadClass("com.jinggujin.classloader.Bean"); System.err.println(clazz.getName()); } }Führen Sie die Konsolenausgabe aus und beobachten Sie sie:
com.jinggujin.classloader.BeanWir haben festgestellt, dass nur der von uns gedruckte Klassenname in ausgegeben wurde Konsoleninformationen und der statische Codeblock wird nicht ausgeführt. Darüber hinaus können wir tatsächlich die Umschreibemethode
von Class.forName(String name)
verwenden, um den gleichen Effekt des stillen Ladens zu erzielen. forName(String name, boolean initialize, ClassLoader loader)
Zusammenfassung
Das obige ist der detaillierte Inhalt vonJava lädt stillschweigend Beispielcode für die Klassenimplementierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!