浏览 15697 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-08-03
1、Class c1 = Class.forName ("java.lang.String"); 2、ClassLoader ccl = new ClassLoader(); Class ccl.loadClass( String name, boolean resolve ); 现在我不明白这2种方式的差别,以及如何在适当的情况下运用他们。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间: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来装载所指定的类. 不知道我说得是否够清晰了. |
|
返回顶楼 | |
发表时间:2005-08-05
谢谢你的回答.我明白拉你的意思,我继续问一下,为什么要用不同的ClassLoader 装载,如果我都用class.forname()有那些情况是不能满足?
|
|
返回顶楼 | |
发表时间:2005-08-05
wanghualong 写道 谢谢你的回答.我明白拉你的意思,我继续问一下,为什么要用不同的ClassLoader 装载,如果我都用class.forname()有那些情况是不能满足?
举例来说:如果在Class被载入的过程中,你希望使用在自己的Class Loader来实现特定的操作,请使用ClassLoader方式。 貌似CGLib之类的bytecode generation框架很多地方会使用指定特殊ClassLoader的方式。 PS:仅为揣测,或许还得高人斧正 |
|
返回顶楼 | |
发表时间:2005-08-06
楼上是对的,使用多个classloader的情况非常常见,比如说我们的app server,那么都是这样的. 在Web与EJB间, 他们的classLoader就是不同的,这样做的目的就是为了避免两者间类装载的相互干扰.
|
|
返回顶楼 | |
发表时间:2005-08-16
1、ClassLoader中的resolveClass方法,API Doc中说是用来Link Class。这个link什么意思?
2、JVM bootstrap Class Loader和System Class Loader的异同?这个好像我在JVM Spec中也没有找到 |
|
返回顶楼 | |
发表时间: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 |
|
返回顶楼 | |
发表时间: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来查找。 |
|
返回顶楼 | |