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

类的动态加载(编写一个JAVA文件,并在电脑的其他地方非本工程里存放一个或几个.class文件。在编写的这个JAVA文件中引用.class对象并使用.class中的方法。... 类的动态加载(编写一个JAVA文件,并在电脑的其他地方非本工程里存放一个或几个.class文件。在编写的这个JAVA文件中引用.class对象并使用.class中的方法。在静态加载方法中我们都是通过 类名 对象名=new 类名();实现类的加载) 展开
 我来答
莔囧冏冋冂
2012-05-14 · TA获得超过642个赞
知道小有建树答主
回答量:411
采纳率:100%
帮助的人:544万
展开全部
一:想要加载的类在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");
}
}
断雁西风小店
2012-05-15 · TA获得超过107个赞
知道小有建树答主
回答量:183
采纳率:0%
帮助的人:49.1万
展开全部
要用到反射,不好理解,参考莔囧冏冋冂 | 五级,和反射的api
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
勇敢者Nj
2012-05-14 · 贡献了超过415个回答
知道答主
回答量:415
采纳率:0%
帮助的人:77.8万
展开全部
我不懂啊!我懂得话一定帮你啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式