ClassLoader 是負責在執行時間動態載入 Java 類別的對象,以防止 JVM 意識到 ClassLoader 是 Java 執行時間環境的一部分。它使 JVM 的生活更輕鬆。 JVM 在應用程式需要時將類別載入到記憶體中,並且不會一次載入所有類別。然後 ClassLoader 介入並將類別載入到記憶體中。
開始您的免費軟體開發課程
網頁開發、程式語言、軟體測試及其他
讓我們看看 java.lang.ClassLoader 在 Java 函式庫程式碼中是如何實現的以及它的功能是什麼。
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() };
我們來看看java的ClassLoader有哪些功能:
示範類別載入器如何運作的範例:
代碼:
public class A() { public void addOne() { B b = new B(); b.addTwo(); } }
ClassLoader 在上述場景中如何載入類別:
在本教程中,我們將討論不同類型的類別載入器及其內建功能以及使用它的原因。
擴充類別載入器是 Bootstrap 的子類別。它用於載入進入 JVM 的所有 Java 類別的擴充。
每個類別都有一個指向它所建立的所有類別的連結。它實際上需要有一個記憶體來儲存靜態字段。如果 classLoader 洩漏任何單一類別的任何靜態字段,則僅表示您洩漏了 ClassLoader。如果這樣做,您將洩漏所有類別和一堆物件以及它們連結到的所有物件。類別載入器洩漏可能太危險了。
每次我們在應用程式的執行階段重新部署或新增增強功能時,ClassLoader 都會載入一個類,而不會重新載入或卸載一個類別。因此,當類別載入器從頭開始載入單一類別時,它將具有一些對象,以便從頭開始重新建立或重新載入它,舊類別載入器將物件從舊狀態傳送到新狀態。所以在這個轉變過程中,可能會出現洩漏。所以當你洩漏一個物件時,你就洩漏了一個類,所以它是類別載入器。
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:
以上是Java 中的類別載入器的詳細內容。更多資訊請關注PHP中文網其他相關文章!