分类

  1. 引导类加载器:BootstrapClassLoader(由c程序写的)
  2. 自定义类加载器:直接或间接继承了ClassLoader的都叫做自定义类加载器。
  3. 系统类加载器 -> 扩展类加载器 -> 引导类加载器
  4. 用户写的类的类加载器是系统类加载器。String类等其他java核心类(JAVA_HOME路径下的jre、lib、rt.jar包都认为是核心类库)的类加载器是引导类加载器

引导类加载器

  1. 由c/c++编写
  2. 不继承ClassLoader,没有父类加载器
  3. 加载扩展类加载器和系统类加载器,并指定为他们的父类加载器
  4. 出于安全考虑,引导类加载器只加载java\javax\sun等开口的包名

    扩展类加载器

  5. 使用java语言编写,由sun.misc.LancherExtClassLoader实现

  6. 派生于ClassLoader类
  7. 父类加载器是启动类加载器,注意这里的父类并不是说继承关系(因为启动类加载器是c++编写,扩展类加载器并不能继承,而是说一种逻辑上的等级关系)