AppClassLoader

疑问

为何 继承ClassLoader的自定义类加载器默认会调用super()传入默认的AppClassLoader作为parent?

带着这个疑问 , 查看了下URLClassLoader的源码

根据URLClassLoader继承了ClassLoader,

URLClassLoader

类加载器的实例隔离Class对象中MyClassLoader隐式的调用了super()
在这里插入图片描述

在这里插入图片描述
ClassLoader.getSystemClassLoader()获取系统默认
ClassLoader

Launcher 去获取 ClassLoader
在这里插入图片描述
返回的this.loader
在这里插入图片描述
this.loader在初始化Launcher的时候去初始化

注入ExtClassLoader作为AppClassLoader的parent 并返回该AppClassLoader。
由此已经解决了疑问 【为何 继承ClassLoader的自定义类加载器默认会调用super()传入默认的AppClassLoader作为parent?】
在这里插入图片描述

AppClassLoader的类加载目录

顺便了解了一下系统类加载器 App ClassLoader中提到AppClassLoader加载的 -cp/-classpath 指定的类库资源,但是为何呢?
因为如图可以看见 初始化AppClassLoader的时候, 已经指定了java.class.path作为其加载类的目录。而java.class.path包含了classpath的目录
在这里插入图片描述
AppClassLoader加载的是java.class.path指定的目录,其包含-classpath指定的目录
在这里插入图片描述
-classpath
在这里插入图片描述

ps:ExtClassLoader类似
在这里插入图片描述

原文地址:https://www.cnblogs.com/thewindkee/p/12873122.html