ClassLoader

作者: 我是王串串的崔先生 | 来源:发表于2018-04-14 19:22 被阅读22次

    ClassLoader 顾名思义 是jvm用来加载类的 。

    先看一下

    
    package java.lang;
    
    public abstract class ClassLoader {
    
    public Class loadClass(String name);
    
    protected Class defineClass(byte[] b);
    
    public URL getResource(String name);
    
    public Enumeration getResources(String name);
    
    public ClassLoader getParent();
    
    }
    
    

    loadClass() 用来加载类 返回一个class对象

    defineClass() 接受一个byte[] 返回一个Class对象

    getResourse() 则从加载路径上放回加载的文件url

    getParent() 返回父加载器

    bootStrapClassLoader 是jvm的一部分,运用c编写,用来加载jvm核心类库。

    //如果调用classname.getClassLoader() 返回null //则是有bootStrapClassLoader加载。

    %JRE_HOME%\lib下的rt.jar、resources.jar、charsets.jar和class 包括String和number类

    ExtentionClassLoader 是拓展的类加载器 主要加载%java_home%lib\ext 下的类库

    AppClassLoader 也叫SystenAppClass 加载当前classpath的所有类

    加载顺序是

    BootStrapClassLoader > ExtentionClassLoader > AppClassLoader

    每个类加载器都有一个父加载器 可以通过调用getParent()方法获得

    类加载器 使用双亲委托
    loadClass(name)

    当前加载器在缓存中查找是否加载过该类 如果没加载则向父加载器询问是否加载过该类 如果都没有则放回本加载器加载

    findLoadedClass() if fail 调用getParent() .loadClass() 如果父类加载失败 则调用findClass()寻找该类

    相关文章

      网友评论

        本文标题:ClassLoader

        本文链接:https://www.haomeiwen.com/subject/cbzlkftx.html