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类似
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值