类加载器的作用

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/bd3efab9-12c5-4992-8c39-124422bee228/IMG_0230.jpg

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/caaf504b-97d6-44d2-9dc5-a01a5a3e670c/IMG_0231.jpg

package top.ltyzqhh.Reflection;

public class Test06 {
    public static void main(String[] args) {
        //获取系统类的加载器
        ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
        System.out.println(systemClassLoader);

        //获取系统类加载器的父类加载器-->扩展类加载器
        ClassLoader parent = systemClassLoader.getParent();
        System.out.println(parent);

        //获取扩展类加载器的父类加载器-->根加载器(C/c++)
        ClassLoader parent1 = parent.getParent();
        System.out.println(parent1);
        

    }
}

运行结果

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c81d9efc-05ee-4f55-bbe3-32a17d52b153/Snipaste_2021-05-09_15-56-13.png

扩展知识:双亲委派机制

是防止同名包、类与 jdk 中的相冲突,实际上加载类的时候,先通知 appLoader,看 appLoader 是否已经缓存,没有的话,appLoader 又委派给他的父类加载器(extLoader)询问,看他是不是能已经缓存加载,没有的话,extLoader 又委派他的父类加载器(bootstrapLoader)询问,BootstrapLoader看是不是自己已缓存或者能加载的,有就加载,没有再返回 extLoader,extLoader 能加载就加载,不能的话再返回给 appLoader 加载,再返回的路中,谁能加载,加载的同时也加缓存里。正是由于不停的找自己父级,所以才有 Parents 加载机制,翻译过来叫 双亲委派机制。