说明:双亲委派

  1. 引导类加载器(bootstrap class loader)
    用来加载java的核心库(JAVA_HOME/jre/lib/rt.jar或sun.boot.class.path路径下的内容),使用原生代码来实现的,并不继承java.lang.ClassLoader;
    加载扩展类和应用程序类加载器,并指定它们的父类加载器。
  2. 扩展类加载器(extensions class loader)
    用来加载java的扩展库(JAVA_HOME/jre/ext/*.jar或java.ext.dirs路径下的内容)。java虚拟机的实现会提供一个扩展库目录,该类加载器在此目录下查找并加载java类;
    由sun.misc.Launcher$ExtClassLoader实现。
  3. 应用程序类加载器(application class loader)
    根据java应用的类路径(classpath)加载,一般java应用的类都是由其加载;
    由sun.misc.Launcher$AppClassLoader实现。
  4. 自定义类加载器
    继承java.lang.ClassLoader实现。