Java类加载机制

本篇文章主要用作学习结果记录,比较简单粗暴

准备工作

jdk中不包含sun包下的源码,需要自行下载

  1. 打开 https://github.com/openjdk-mirror/jdk.git
  2. 切换至 jdk8u/jdk8u/master 分支
  3. 下载压缩包至本地

打开idea --> File --> Project Structure --> SDKs --> 右侧选择对应jdk版本 --> 右侧选择 sourcepath --> 添加刚才下载的源码,sun包就在 src\share\classes 目录下
在这里插入图片描述

自定义类加载器

ClassLoader作为负责装入类的对象,对类加载过程就进行了简单的描述,并且给出了一个网络类加载器示例。它建议我们自定义的类加载器继承ClassLoader,并重写findClass方法,在findClass方法中调用defineClass方法将组成类的字节数组转换为Class类示例。

按照建议,我定义了一个匿名内部类,实现了ClassLoader,该类仅仅提供了加载指定类文件的功能,文件路径是固定的绝对路径
在这里插入图片描述
测试

Class<?> dogClass = diskClassLoader.loadClass("com.bluescreen.Dog");
Object dogObj = dogClass.newInstance();
Method run = dogClass.getDeclaredMethod("run");
run.invoke(dogObj);

类加载过程

画个图吧,加载过程其实就是一层层向上委托,每个类加载器都有一个父类加载器,自定义的类加载器默认的parent是AppClassLoader。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值