Ein ClassLoader ist ein Objekt, das für das dynamische Laden von Java-Klassen während der Laufzeit verantwortlich ist, um zu verhindern, dass JVM erkennt, dass ClassLoader Teil der Java-Laufzeitumgebung ist. Es macht das JVM-Leben einfacher. JVM lädt die Klassen in den Speicher, wenn die Anwendung sie benötigt, und lädt nicht alle auf einmal. Dann kommt ClassLoader ins Spiel und lädt die Klasse in den Speicher.
Starten Sie Ihren kostenlosen Softwareentwicklungskurs
Webentwicklung, Programmiersprachen, Softwaretests und andere
Sehen wir uns an, wie der java.lang.ClassLoader im Java-Bibliothekscode implementiert ist und welche Funktionen er bietet.
java.lang.ClassLoader:
public abstract class ClassLoader { public class loadClass(String name); protected class defineClass(byte[] b); public URL getResource(String name); public Enumeration getResources(String name); public ClassLoader getParent() };
Schauen wir uns an, welche Funktionen der ClassLoader in Java bietet:
Beispiel zur Veranschaulichung der Funktionsweise eines Klassenladers:
Code:
public class A() { public void addOne() { B b = new B(); b.addTwo(); } }
Wie der ClassLoader Klassen im obigen Szenario lädt:
In diesem Tutorial werden wir über verschiedene Arten von Klassenladern und ihre integrierten Funktionen sprechen und warum sie verwendet werden.
Die Erweiterung ClassLoader ist ein Kind von Bootstrap. Es wird verwendet, um die Erweiterungen aller Java-Klassen zu laden, die in JVM eintreffen.
Jede Klasse hat einen Link zu allen Klassen, die sie erstellt. Es muss effektiv über einen Speicher zum Speichern statischer Felder verfügen. Wenn classLoader ein statisches Feld für eine einzelne Klasse verliert, bedeutet das lediglich, dass Sie einen ClassLoader verlieren. Wenn Sie dies tun, verlieren Sie alle Klassen und eine Reihe von Objekten sowie alle Objekte, mit denen sie verknüpft sind. ClassLoader-Lecks können viel zu gefährlich sein.
Jedes Mal, wenn wir eine erneute Bereitstellung durchführen oder zur Laufzeit in unserer Anwendung Verbesserungen hinzufügen, lädt ClassLoader eine Klasse, lädt jedoch niemals eine Klasse neu oder entlädt sie. Wenn also ein Klassenlader eine einzelne Klasse von Grund auf lädt, verfügt er über einige Objekte, um sie neu zu erstellen oder von Grund auf neu zu laden. Der alte Klassenlader sendet das Objekt vom alten Zustand in den neuen Zustand. Bei diesem Übergang kann es also zu einem Leck kommen. Wenn Sie also ein Objekt verlieren, verlieren Sie auch eine Klasse, also den Klassenlader.
There are 3 principles that a java ClassLoader works upon:
This is the custom ClassLoader example named with ClassLoaderJava.java:
Code: ClassLoaderJava.java
import java.lang.reflect.Constructor; import java.lang.reflect.Method; public class ClassLoaderJava extends ClassLoader{ // created to load class and invoke method. public void classLoadingDemo(String classBinString, String methodName) { try { // will create an instance of class loader. ClassLoader classLoaderInstance = this.getClass().getClassLoader(); // creating an instance of a class to store the loaded class. Class loadedClass = classLoaderInstance.loadClass(classBinString); System.out.println("Loaded class name is: " + loadedClass.getName()); // Fetching the constructor of loaded class. Constructor con = loadedClass.getConstructor(); // creating an instance to invoke the method. Object obj = con.newInstance(); // Will store the method fetched from loaded class. Method invokingMethod = loadedClass.getMethod(methodName); System.out.println("Invoked method name is: " + invokingMethod.getName()); invokingMethod.invoke(obj); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } }
Code: DemoClass.java
public class DemoClass { public void add() { System.out.println("This method is invoked by the classLoader."); } }
Code: LoadingTest.java
public class LoadingTest { public static void main(String[] args) { ClassLoaderJava classLoader = new ClassLoaderJava(); classLoader.classLoadingDemo("DemoClass" , "add"); } }
Output:
Das obige ist der detaillierte Inhalt vonClassLoader in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!