黑马程序员技术交流社区

标题: 反射加载类 与 使用类加载器加载类有什么区别 [打印本页]

作者: 董凯    时间: 2013-7-14 16:38
标题: 反射加载类 与 使用类加载器加载类有什么区别
本帖最后由 杨兴庭 于 2013-7-14 18:21 编辑

方式一:反射加载
Class cl = Class.forName("classname");


方式二
使用ClassLoader
URLClassLoader loader = new URLClassLoader(urls);
Class cl = loader.loadClass("classname);



这两种方式加载类  有什么区别吗?  或者说有什么联系?
作者: 丁永志    时间: 2013-7-14 17:03
使用Class.forname(classname) 会使用当前类的类加载器 来加载指定的类

Class.forname也有一个重载的方法Class.forname(name, initialize, loader) 可以指定类加载器


实际上Class.forname就是对ClassLoader 进行的包装。

推荐深入java虚拟机第二版 这个书。
作者: 王中伟    时间: 2013-7-14 17:53
一个是用在j2se项目上的,一个是用在Web项目上的,但是有时这两个都能用,用哪个都可以;Class.forName是从指定的classloader中装载类,如果没有指定,也就是一个参数的时候,是从装载当前对象实例所在的classloader中装载类.
      而ClassLoader的实例调用loadclass方法,是指从当前ClassLoader实例中调用类,而这个实例与装载当前所在类实例的Classloader也许不是同一个.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2