class Test{
void loadClass(String path) throws Exception {
//new A();eclipse报错,找不到这个类
String className = "A";
File file = new File(path);
URLClassLoader fscl = new URLClassLoader(new URL[] { file.toURI().toURL() });
Class> class1 = fscl.loadClass(className);
System.out.println(class1.hashCode());
Object obj1 = class1.newInstance();
Method method1 = class1.getMethod("say1", new Class[] {});
method1.invoke(obj1, new Object[] {});
}
loadClass("D:\work\projects\");
//修改A.java文件,并编译生成class文件
//注意A.class不能和当前类在同一个classpath中,或者说当前类的classloader或其父classloader中没有加载A.class。JVM根据类的全名和加载此类的类加载器是否一样来判断两个类是否相同,只有两者都相同的情况,才认为两个类是相同的。
loadClass("D:\work\projects\");
}
}
如果类A和类B被加载同一个classloader加载,类A想重新加载类B,是不可行的(个人认为)。
我上面的例子中Test类是在D:workspacesrc中,在运行时环境中,没有类A,Test的classloader和加载A的是不同的,这一点很重要。