如何动态加载类

jessewizard 2011-02-24 11:26:25
假如我有一个类,实现了一个接口,接口已知。
要怎么加载这个类?只知道类名,还是它的物理位置。
...全文
191 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jessewizard 2011-02-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chosen0ne 的回复:]

可以通过两种方式
1.Class.forName(String className)
2.ClassLoader.loadClass(String className,boolean resolve) 参数resolve表示是否连接

以上方法都可以动态的,在程序运行过程中加载类。className是类的全限定类名,并且这个类的.class文件必须在jvm的CLASS_PATH上

……
[/Quote]
什么叫全限定类名?是包名加类名吗。如果只知道物理位置和类名呢,不一定在CLASS_PATH上
chosen0ne 2011-02-25
  • 打赏
  • 举报
回复
可以通过两种方式
1.Class.forName(String className)
2.ClassLoader.loadClass(String className,boolean resolve) 参数resolve表示是否连接

以上方法都可以动态的,在程序运行过程中加载类。className是类的全限定类名,并且这个类的.class文件必须在jvm的CLASS_PATH上
Model_CZ 2011-02-25
  • 打赏
  • 举报
回复
呵呵~ 凑个热闹,1楼6楼正解!总结一下:
1. 想要加载的类在java虚拟机启动前已经存在于classPath中,要加载这个类,参看1楼回答
2. 想要加载的类不在classPath中,或者java虚拟机启动后才放入classPath中,这时需要变更ClassLoader。参考6楼回答。
jessewizard 2011-02-25
  • 打赏
  • 举报
回复
        	URL url = new URL("file:/G:/workspace/android_workspace/workspace/TestPlugin/plugin/HelloWorld.jar");
URLClassLoader myClassLoader = new URLClassLoader(new URL[]{url});
Object o = myClassLoader.loadClass("com.wizard.HelloWorld").newInstance();
jessewizard 2011-02-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 kala197 的回复:]

你查下java 反射
[/Quote]
反射我看过了,解析类也会,只是不会怎么根据物理路径来调用类
runer 2011-02-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jessewizard 的回复:]

什么叫全限定类名?是包名加类名吗。如果只知道物理位置和类名呢,不一定在CLASS_PATH上[/Quote]


java.net.URLClassLoader
kala197 2011-02-25
  • 打赏
  • 举报
回复
你查下java 反射

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧