类加载器
引导类加载器BootStrapClassLoader,C++
扩展类加载器ExtClassLoader,通过C++调用Java的Launcher 构建
其成员变量parent赋值为ext加载器,构成逻辑上的父子关系
引用类加载器,通过C++调用java的Launcher构建
其成员变量parent赋值为ext加载器,构成逻辑上的父子关系
自定义类加载器
加载步骤
加载:加载类,其成员/关联类也由加载该类的类加载器加载
验证:验证字节码正确性
准备:赋予对象初值、静态final修饰赋值
解析:符号引用转直接引用
初始化:执行静态代码块、执行<init>方法、成员变量赋值、构造方法
使用
卸载
双亲委派
自定义类加载器三部曲
继承ClassLoader
传入路径
重写findClass方法
打破双亲委派
只需要在loadClass方法中自己相关的类不使用parent去加载即可
双亲委派原因
沙箱机制:核心类不被修改
防重复加载类