设为首页 加入收藏

TOP

Java类加载器(二)
2014-11-24 02:01:47 来源: 作者: 【 】 浏览:3
Tags:Java 加载
findLoadedClass(name);


if (c == null) {


try {


if (parent != null) {


c = parent.loadClass(name, false);


} else {


c =findBootstrapClassOrNull(name);


}


} catch(ClassNotFoundException e) {


// ClassNotFoundException thrown if class not found


// from the non-null parent class loader


}


if (c == null) {


// If still not found, then invoke findClass in order


// to find the class.


c =findClass(name);


}


}


大致这是这样。


五、 用户自定义类加载器


通过前面的分析,我们可以看出,要想实现自定义类加载器,除需要继承ClassLoader之外,还有就是覆写findClass()方法,在这里面写自己的操作。


一般用户自定义类加载器的工作流程:


1、首先检查请求的类型是否已经被这个类装载器装载到命名空间中了,如果已经装载,直接返回;否则转入步骤2


2、委派类加载请求给父类加载器(更准确的说应该是双亲类加载器,整个虚拟机中各种类加载器最终会呈现树状结构),如果父类加载器能够完成,则返回父类加载器加载的Class实例;否则转入步骤3


3、调用本类加载器的findClass(…)方法,试图获取对应的字节码,如果获取的到,则调用defineClass(…)导入类型到方法区;如果获取不到对应的字节码或者其他原因失败, 回异常给loadClass(…), loadClass(…)转抛异常,终止加载过程(注意:这里的异常种类不止一种)。


(说明:这里说的自定义类加载器是指JDK1.2以后版本的写法,即不覆写改变java.lang.loadClass(…)已有委派逻辑情况下)


具体就不举例子了!


推荐阅读


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Java类之间的关联关系 下一篇Java内部类

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: