扩展类加载器(Extension Class Loader)和应用程序类加载器(Application Class Loader)是Java中两个常见的类加载器,它们之间存在以下区别:
加载范围: 扩展类加载器负责加载Java扩展库,位于<JAVA_HOME>/lib/ext目录下的JAR文件。它加载的类通常是供Java平台扩展使用的类。应用程序类加载器负责加载应用程序的类,包括应用程序的类路径(classpath)下的类文件。它加载的类是应用程序自身的类。
委派顺序: 扩展类加载器在加载类时,会先委派给父类加载器(通常是启动类加载器)进行加载,只有当父类加载器无法加载时,扩展类加载器才会尝试加载该类。这保证了扩展类加载器无法加载Java核心类库中的类。
应用程序类加载器在加载类时,也会先委派给父类加载器(通常是扩展类加载器)进行加载,只有当父类加载器无法加载时,应用程序类加载器才会尝试加载该类。这保证了应用程序类加载器无法加载Java核心类库和扩展库中的类。
默认加载器: 扩展类加载器是应用程序类加载器的父类加载器,也是应用程序类加载器的默认父加载器。当使用应用程序类加载器加载类时,如果未指定父加载器,会默认使用扩展类加载器作为父加载器。
类路径: 扩展类加载器的类路径包括<JAVA_HOME>/lib/ext目录下的JAR文件。应用程序类加载器的类路径包括应用程序的类路径(classpath),通常是通过命令行参数或配置文件指定的。
网友评论