A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杨兴庭 于 2013-7-14 18:21 编辑

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


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



这两种方式加载类  有什么区别吗?  或者说有什么联系?

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

2 个回复

倒序浏览
使用Class.forname(classname) 会使用当前类的类加载器 来加载指定的类

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


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

推荐深入java虚拟机第二版 这个书。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
一个是用在j2se项目上的,一个是用在Web项目上的,但是有时这两个都能用,用哪个都可以;Class.forName是从指定的classloader中装载类,如果没有指定,也就是一个参数的时候,是从装载当前对象实例所在的classloader中装载类.
      而ClassLoader的实例调用loadclass方法,是指从当前ClassLoader实例中调用类,而这个实例与装载当前所在类实例的Classloader也许不是同一个.

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马