zoukankan      html  css  js  c++  java
  • 类加载器

    类加载器

    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-INFlib、${CONTEXT_HOME}WEB-INFclasses,应用类加载器,它负责加载这两个路径下的类!

    引导

    扩展

    系统

    特性:

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

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

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

  • 相关阅读:
    7月30日 举办专注于微服务的.NET Conf Focus
    我和ABP vNext 的故事
    Windows环境搞好的Dockerfile文件 在Linux上报错了
    [LeetCode] 955. Delete Columns to Make Sorted II 删除列使其有序之二
    [LeetCode] 954. Array of Doubled Pairs 两倍数对儿数组
    上周热点回顾(8.3-8.9)团队
    发布新版首页“外婆新家”升级版:全新的UI,熟悉的味道团队
    上周热点回顾(7.27-8.2)团队
    终于换新颜:新版网站首页发布上线团队
    上周热点回顾(7.20-7.26)团队
  • 原文地址:https://www.cnblogs.com/Prozhu/p/5456564.html
Copyright © 2011-2022 走看看