请问: 一个类装载的问题
ClassLoader.loadClass(classname)有区别吗?
Class.forName()使用代码当前所在类的加载器来加载你需要的类。
而ClassLoader的实例方法指派特定的加载器来加载类。
进一步研究Class.forName()是调用Class.forName(name, initialize, loader);
也就是Class.forName("XXX.XXX"); 等同与 Class.forName("XXX.XXX", true, CALLCLASS.class.getClassLoader());
第二个参数表示装载类的时候是否初始化该类, 即调用类的静态块的语句及初始化静态成员变量。
Class clazz = cl.loadClass("XXX.XXX"); 没有指定是否初始化的选项。只有执行clazz.newInstance();时才能够初始化类。可以说 Class.forName("XXX.XXX", false, cl)执行过程是一致的。只是ClassLoader.loadClass()是更底层的操作。
不过也可以采用三个参数的forName方法,将第二个参数指定为false,这样以来效果就和ClassLoader.loderclass()一样了。