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

    类加载器

    前提:通过一个类的全限定名来获取描述此类的二进制字节流,实现这个动作的代码模块称为类加载器。这里并没有规定读取方式,可以从Class文件、网络、数据库、内存等。比较两个类是否相等,需要两个类来源于同一个Class文件,被同一个类加载器加载。

    Java有两种类加载器。Java虚拟机用c++语言实现的启动类加载器(Bootstrap ClassLoader)。Java语言的其它类加载器如:扩展类加载器(Extension ClassLoader)和系统(应用)类加载器(Application ClassLoader

    启动(Bootstrap)类加载器:<Java_Home>/lib-Xbootclasspath选项指定的路径下能被虚拟机识别的类库(不是任意的)加载到虚拟机内存中。

    扩展(Extension)类加载器:负责将< Java_Home >/lib/ext或者由系统变量-Djava.ext.dir指定位置中的类库加载到内存中。开发者可以直接使用标准扩展类加载器。

    系统(System)类加载器:负责将系统类路径java -classpath-Djava.class.path变量所指的目录下的类库加载到内存中。开发者可以直接使用系统类加载器。默认的类加载器。

    类加载双亲委派机制:Java设计者推荐开发者采用双亲委派机制实现类加载器。也是我们使用JDK的虚拟机的类加载方式。加载一个类首先会递归交给父类加载,如果加载不成功则由自己加载。


    图三 类加载器默认委派关系图

     

    我们首先看一下java.lang.ClassLoader抽象类中重要的两个方法:

    MyClassLoader.java

    自定义类加载器,需要传入要加载的目录

    实现方式(这个方法会被调用两次,一次主动一次被动)(为什么?)

    测试方法

    上面重写loadClass方法是不推荐的,推荐重写findClass方法。loadClass仍交给父类。

    只需要把loadClass方法替换为findClass方法。其它不变。测试结果不一致。两种类加载器加载后的Class类型是不一样的。

  • 相关阅读:
    How To Build CyanogenMod Android for smartphone
    CentOS安装Code::Blocks
    How to Dual boot Multiple ROMs on Your Android SmartPhone (Upto Five Roms)?
    Audacious——Linux音乐播放器
    How to Dual Boot Multiple ROMs on Your Android Phone
    Everything You Need to Know About Rooting Your Android Phone
    How to Flash a ROM to Your Android Phone
    什么是NANDroid,如何加载NANDroid备份?
    Have you considered compiled a batman-adv.ko for android?
    BATMAN—Better Approach To Mobile Adhoc Networking (B.A.T.M.A.N.)
  • 原文地址:https://www.cnblogs.com/jiumao/p/7136426.html
Copyright © 2011-2022 走看看