我想创建自定义类加载器。但是我对loadClass()感到困惑,这个方法是否将指定的类加载到内存中?
如果是,那么为什么不调用指定类的静态块?
//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);
}
}
}
答案 0 :(得分:7)
当你加载一个类时,它默认不会使用它,直到它被使用。
调用此方法相当于调用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
答案 1 :(得分:1)
它还能加载它吗? loadClass
返回Class<?>
类型的对象,该对象表示刚刚加载的类。