类加载器笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/starjingweij/article/details/78756846
类加载器


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,应用类加载器,它负责加载这两个路径下的类!


  引导
  扩展
  系统


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

猜你喜欢

转载自blog.csdn.net/starjingweij/article/details/78756846
今日推荐