平台类加载器(Java9+;)和扩展类加载器(Java8-)之间有什么区别?

平台类加载器(Java9+;)和扩展类加载器(Java8-)之间有什么区别?,java,classloader,java-9,Java,Classloader,Java 9,我已经阅读了问题和Java 9迁移指南(关于的段落),但仍然没有弄清楚扩展CL和平台CL之间的明显区别。因此,我恳请您避免将该问题标记为重复问题 关于扩展CL,很明显,由于CL可见性原则,它允许查看父级引导CL加载的所有类 自从Java 9扩展CL被平台CL取代以来。有两个显著的区别: Platform CL不是URLClassLoader JavaSE平台中的所有类都保证通过平台类加载器可见。此外,模块中的类在Java社区流程下标准化,但不属于JavaSE平台的一部分,可以通过平台类加载器保

我已经阅读了问题和Java 9迁移指南(关于的段落),但仍然没有弄清楚
扩展CL
平台CL
之间的明显区别。因此,我恳请您避免将该问题标记为重复问题

关于
扩展CL
,很明显,由于CL可见性原则,它允许查看父级
引导CL
加载的所有类

自从Java 9
扩展CL
平台CL
取代以来。有两个显著的区别:

  • Platform CL
    不是
    URLClassLoader
  • JavaSE平台中的所有类都保证通过平台类加载器可见。此外,模块中的类在Java社区流程下标准化,但不属于JavaSE平台的一部分,可以通过平台类加载器保证是可见的

  • 我被第二点弄糊涂了。“模块中的类在Java社区流程下标准化,但不是Java SE平台的一部分”是什么意思?

    ClassLoader javadoc中的“运行时内置类加载器”部分是一个很好的参考。在大多数情况下,平台类加载器相当于以前所称的扩展类加载器。重命名它的一个动机是扩展机制已被删除。您在迁移指南中引用的部分确实令人困惑——我将创建一个bug来澄清这一点。JDK中唯一一个未由Java SE定义的JCP定义模块是Java.smartcardio模块。ClassLoader javadoc中的“运行时内置类加载器”部分是一个很好的参考。在大多数情况下,平台类加载器相当于以前所称的扩展类加载器。重命名它的一个动机是扩展机制已被删除。您在迁移指南中引用的部分确实令人困惑——我将创建一个bug来澄清这一点。JDK中包含的唯一未由JavaSE定义的JCP定义的模块是Java.smartcardio模块。