1、类加载时机
类的整个生命周期包括了:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)七个阶段。其中验证、准备和解析三个部分统称为连接(Linking),这七个阶段的发生顺序如下图。
上图中,加载、验证、准备、初始化和卸载这五个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班地开始。而解析阶段不一定:它在某些情况下可以在初始化阶段之后再开始,这是为了支持Java语言的运行时绑定(也称为动态绑定或晚期绑定)。这里的按部就班地“开始”,而不是“进行”或“完成”,是因为这些阶段通常都是互相交叉地混合式进行的,通常再一个阶段 执行的过程中调用或激活另外一个阶段。
1.1、类的主动引用和被动引用。
虚拟机规范严格规定了只有四种情况(主动引用)必须对类进行“初始化”(而加载、验证、准备自然需要在此之前开始)。所有的java虚拟机实现必须在每个类或接口被java程序“首次主动引用”时才初始化他们。
主动引用(四种)
1)遇到new、getstatic、putstatic或invokestatic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。生成这4条指令的常见Java代码场景是:使用new关键字实例化对象的时候、
2、类加载过程
类加载的全过程:加载、验证、准备、解析和初始化这五个阶段。
3、类加载器