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中文网其他相关文章!