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 中的执行顺序:

  • 相关阅读:
    uva 11294 Wedding
    uvalive 4452 The Ministers’ Major Mess
    uvalive 3211 Now Or Later
    uvalive 3713 Astronauts
    uvalive 4288 Cat Vs. Dog
    uvalive 3276 The Great Wall Game
    uva 1411 Ants
    uva 11383 Golden Tiger Claw
    uva 11419 SAM I AM
    uvalive 3415 Guardian Of Decency
  • 原文地址:https://www.cnblogs.com/Prozhu/p/5456564.html
Copyright © 2011-2022 走看看