论坛首页 Java企业应用论坛

Class.forName和ClassLoader.loadClass的不同点在那里?

浏览 15697 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-08-03  
类的加载有下面的2种方式:
1、Class c1 = Class.forName ("java.lang.String");

2、ClassLoader ccl = new  ClassLoader();
Class ccl.loadClass( String name, boolean resolve );

现在我不明白这2种方式的差别,以及如何在适当的情况下运用他们。
   发表时间:2005-08-05  
Class.forName是从指定的classloader中装载类,如果没有指定,也就是一个参数的时候,是从装载当前对象实例所在的classloader中装载类.
      而ClassLoader的实例调用loadclass方法,是指从当前ClassLoader实例中调用类,而这个实例与装载当前所在类实例的Classloader也许不是同一个.
      举个例子吧, 有A,B , C两个ClassLoader , 当前运行的类D的实例是d(装载它的是A) ,  如果D中使用Class.forName那么就是使用的ClassLoader就是A,当然,也可以指定为B. 而如果D中代码找到的ClassLoader实例是C,那么就是用D来装载所指定的类.
      不知道我说得是否够清晰了.
0 请登录后投票
   发表时间:2005-08-05  
谢谢你的回答.我明白拉你的意思,我继续问一下,为什么要用不同的ClassLoader 装载,如果我都用class.forname()有那些情况是不能满足?
0 请登录后投票
   发表时间:2005-08-05  
wanghualong 写道
谢谢你的回答.我明白拉你的意思,我继续问一下,为什么要用不同的ClassLoader 装载,如果我都用class.forname()有那些情况是不能满足?


举例来说:如果在Class被载入的过程中,你希望使用在自己的Class Loader来实现特定的操作,请使用ClassLoader方式。

貌似CGLib之类的bytecode generation框架很多地方会使用指定特殊ClassLoader的方式。

PS:仅为揣测,或许还得高人斧正
0 请登录后投票
   发表时间:2005-08-06  
楼上是对的,使用多个classloader的情况非常常见,比如说我们的app server,那么都是这样的. 在Web与EJB间, 他们的classLoader就是不同的,这样做的目的就是为了避免两者间类装载的相互干扰.
0 请登录后投票
   发表时间:2005-08-16  
1、ClassLoader中的resolveClass方法,API Doc中说是用来Link Class。这个link什么意思?
2、JVM bootstrap Class Loader和System Class Loader的异同?这个好像我在JVM Spec中也没有找到
0 请登录后投票
   发表时间:2005-08-18  
copenhagen 写道

2、JVM bootstrap Class Loader和System Class Loader的异同?这个好像我在JVM Spec中也没有找到


这儿有,呵呵

Java类装载体系中的隔离性

http://gceclub.sun.com.cn/yuanchuang/week-9/classloader.html
0 请登录后投票
   发表时间:2005-08-18  
copenhagen 写道

2、JVM bootstrap Class Loader和System Class Loader的异同?这个好像我在JVM Spec中也没有找到


bootstrap Class Loaders负责装载java.*下的基本类
extension Class Loaders负责装载javax.*下的类
system Class Loaders负责系统(用户)实现的类

三者的关系是
bootstrap class loaders是extension class loaders的父亲
extension class loaders是system class loaders的父亲

class loader的装载机制是parent delegate的模型。即
类的装载是委托给父class loader去查找,如果没有找到才用当前的class loader来查找。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics