首页 > 其他 > 详细

类加载器

时间:2016-05-03 22:02:50      阅读:235      评论:0      收藏:0      [点我收藏+]

类加载器

1. 什么是类加载器

* 把.class文件加载到JVM的方法区中,变成一个Class对象!

2. 得到类加载器

* Class#getClassLoader()

3. 类加载器的分类

它们都是片警!

* 引导:类库!

* 扩展:扩展jar包

* 系统:应用下的class,包含开发人员写的类,和第三方的jar包!classpath下的类!

? ?

系统类加载器的上层领导:扩展

扩展类加载器的上层领导:引导

引导没上层,它是BOSS

? ?

======================================

? ?

4. 类加载器的委托机制

* 代码中出现了这么一行:new A();

> 系统发现了自己加载的类,其中包含了new A(),这说明需要系统去加载A类

> 系统会给自己的领导打电话:让扩展去自己的地盘去加载A类

> 扩展会给自己的领导打电话:让引导去自己的地盘去加载A类

> 引导自己真的去rt.jar中寻找A类

* 如果找到了,那么加载之,然后返回A对应的Class对象给扩展,扩展也会它这个Class返回给系统,结束了!

* 如果没找到:

> 引导给扩展返回了一个null,扩展会自己去自己的地盘,去寻找A类

???? * 如果找到了,那么加载之,然后返回A对应的Class对象给系统,结束了!

???? * 如果没找到

???? > 扩展返回一个null给系统了,系统去自己的地盘(应用程序下)加载A类

???? * 如果找到了,那么加载之,然后返回这个Class,结束了!

???? * 如果没找到,抛出异常ClassNotFoundException

? ?

? ?

5. 类的解析过程

? ?

class MyApp {//被系统加载

? ?

main() {

A a = new A();//也由系统加载

String s = new String();//也由系统加载!

}

? ?

}

class String {//引导

private Integer i;//直接引导加载

}

=====================

6.自定义类加载器

* 继承ClassLoader

* 重写findClass()

=====================

7. Tomcat的类加载器

Tomcat提供了两种类加载器!

* 服务器类加载器:${CATALINA_HOME}\lib,服务器类加载器,它负责加载这个下面的类!

* 应用类加载器:${CONTEXT_HOME}\WEB-INF\lib、${CONTEXT_HOME}\WEB-INF\classes,应用类加载器,它负责加载这两个路径下的类!

引导

扩展

系统

特性:

服务器类加载器:先自己动手,然后再去委托

应用类加载器::先自己动手,然后再去委托

两种加载器的在tomcat 中的执行顺序:

技术分享

类加载器

原文:http://www.cnblogs.com/Prozhu/p/5456564.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!