两者都是一样的。AppClassLoader
SystemClassLoader
看看层次结构。
类加载器遵循三个原则。
委派原则
Bootstrap ClassLoader
负责从 rt.jar 加载标准 JDK 类文件,并且是 Java 中所有类装入器的父级。Bootstrap 类装入器没有任何父级。
Extension ClassLoader
将类加载请求委托给其父级 Bootstrap,如果不成功,则加载类表单 jre/lib/ext 目录或 java.ext.dirs 系统属性指向的任何其他目录
System or Application class loader
它负责从CLASSPATH环境变量,-classpath或-cp命令行选项,JAR内清单文件的Class-Path属性加载应用程序特定的类。
应用程序类装入器是 类 的子类并由类实现。Extension ClassLoader
sun.misc.Launcher$AppClassLoader
除了 ,它主要用 C 语言实现,所有 Java 类装入器都是使用 实现的。Bootstrap class loader
java.lang.ClassLoader
看看这个博客,以更好地了解这三个类加载器。
可见性原则
根据可见性原则,子类加载器可以看到父类加载器加载的类。but vice-versa is not true
如果类 Abc 是在加载的,那么尝试显式加载类 ABC 将抛出Application class loader
Extension ClassLoader
java.lang.ClassNotFoundException
唯一性原则
根据此原则,由 Parent 加载的类不应再由子类加载器加载