classLoader的loadClass()会将类加载到内存中吗?

时间:2011-07-01 10:54:50

标签: java

我想创建自定义类加载器。但是我对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);

    }
}
}

2 个答案:

答案 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<?>类型的对象,该对象表示刚刚加载的类。