可能是重复问题:
使用ClassLoader和Class.forName加载类的区别
据我所知,在Java中提供了两种通过类名初始化类的方法。
Class
public static Class forName(String className) throws ClassNotFoundException
public static Class forName(String name, boolean initialize, ClassLoader loader) throws ClassNotFoundException
ClassLoader:
public Class loadClass(String name) throws ClassNotFoundException { return loadClass(name, false); }
已知forName方法中,我们可以将initialize标志指定为false,这将跳过一些静态内容的初始化。但还有什么呢?我应该如何正确使用它们?
最好能给出一些好的示例。
谢谢!
更新:
在提出问题后,我进行了一些简单的classLoader测试。
ClassLoader cls = ClassLoader.getSystemClassLoader();
Class someClass = cls.loadClass("Test");
Class someClass0= Class.forName("Test");
Class someClass1= Class.forName("Test",false,cls);
URL[] urls = new URL[] {new File("bin/").toURL()};
ClassLoader cls2 = new URLClassLoader(urls, null);
Class someClass2 = cls2.loadClass("Test");
ClassLoader cls3 = new URLClassLoader(urls, cls);
Class someClass3 = cls3.loadClass("Test");
System.out.println(someClass.equals(someClass0));
System.out.println(someClass.equals(someClass1));
System.out.println(someClass.equals(someClass2));
System.out.println(someClass.equals(someClass3));
结果是
true,true,false,true
更新
以下是我的答案关于
loadClass(String name)和loadClass(String name, boolean resolve)之间的区别