类加载时机
加载loading
加载.class文件的方法
类连接阶段
验证阶段
准备阶段
解析阶段
初始化
简而言之,为类的静态变量赋予正确的初始值。如果前面的步骤都没有问题,那么表示类可以顺利装载到系统中,此时才会开始执行Java字节码。即:到了初始化阶段,才开始真正的执行类中定义的Java程序代码。
在加载一个类之前,虚拟机总是试图加载该类的父类,因此父类的<clinit>总是在子类<clinit>之前被调用,也就是会先执行父类的静态变量赋值和静态代码块。
是否生成<clinit>
static + final修饰字段的显示赋值操作到底是在哪个阶段进行赋值
<clinit>线程安全性
类的主动使用和被动使用
被动使用的例子,没有初始化不代表没有加载
类加载器ClassLoader
类加载的分类:显示加载 vs 隐式加载
类的命名空间
类的加载器分类
引导类加载器
扩展类加载器
系统类加载器
用户自定义加载器
双亲委派机制
定义与本质
双亲委派机制的优势以及弊端
弊端
三次双亲委派模型的破坏