gpt4 book ai didi

java - classLoader 的 loadClass() 是否将类加载到内存中?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:16:13 44 4
gpt4 key购买 nike

我想创建自定义类加载器。但是我对loadClass()感到困惑,这个方法是否将指定的类加载到内存中?

如果是那么为什么不调用指定类的静态 block ?

//main class

package custom_class_loader1;


public class Custom_class_loader1 {


public static void main(String[] args) {

try{
CustomClassLoader c=new CustomClassLoader();
Class c1= c.loadClass("custom_class_loader1.ABC");/**does this load ABC class into memory?**/

}catch(Exception e)
{
System.out.println(e);

}
}
}

最佳答案

当你加载一个类时,它不会初始化它,直到它被默认使用。

Invoking this method is equivalent to invoking loadClass(name, false);

此处false表示不解析该类。

控制它的一种方法是使用 Class.forName()

public class Main {
public static void main(String[] args) throws ClassNotFoundException {
ClassLoader cl = new URLClassLoader(new URL[0], ClassLoader.getSystemClassLoader());
System.out.println("unresolved Test");
cl.loadClass("Test");
// or
Class.forName("Test", false, cl);

System.out.println("\ninitialise Test");
Class.forName("Test", true, cl);
}
}

class Test {
static {
System.out.println("Loaded Test class");
}
}

打印

unresolved Test

initialise Test
Loaded Test class

关于java - classLoader 的 loadClass() 是否将类加载到内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6547024/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com