大神们,急求解一道java编程题,实在不会做啊

类的动态加载(编写一个JAVA文件,并在电脑的其他地方非本工程里存放一个或几个.class文件。在编写的这个JAVA文件中引用.class对象并使用.class中的方法。在静态加载方法中我们都是通过 类名 对象名=new 类名();实现类的加载)

一:想要加载的类在java虚拟机启动前已经存在于classPath中,要加载这个类
可以通过两种方式:
1.Class.forName(String className)
2.ClassLoader.loadClass(String className,boolean resolve) 参数resolve表示是否连接
以上方法都可以动态的,在程序运行过程中加载类。className是类的全限定类名,并且这个类的.class文件必须在jvm的CLASS_PATH上

二:想要加载的类不在classPath中,或者java虚拟机启动后才放入classPath中,这时需要变更ClassLoader。
URL url = new URL("file:/D:/demo/");
URLClassLoader myClassLoader = new URLClassLoader(new URL[]{url});
Object o = myClassLoader.loadClass("Test").newInstance();

类加载后用反射调用方法:
Class c = o.getClass();
Method m = c.getDeclaredMethod("mthod");
//m.setAccessible(true); //看情况是否设置m的访问权限。
m.invoke(o);追问

能不能给我具体的代码

追答

//DynamicLoading.java
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;

public class DynamicLoading {
public static void main(String[] args) throws Exception {
URL url = new URL("file:/F:/demo/"); //A和此类必须用同样的编译器版本编译,否则报错
URLClassLoader ucl = new URLClassLoader(new URL[]{url});
Object o = ucl.loadClass("A").newInstance();
Class c = o.getClass();
Method m = c.getDeclaredMethod("print");
m.setAccessible(true);
m.invoke(o);
}
}

//A.java
//A编译后放到F:\demo\
class A {
private void print() {
System.out.println("A has been loaded");
}
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-15
要用到反射,不好理解,参考莔囧冏冋冂 | 五级,和反射的api
第2个回答  2012-05-14
我不懂啊!我懂得话一定帮你啊
相似回答