1.类加载时机
1.遇到new,getStatic,putStatic和invokestatic这四条指令时,没有对应类初始化,则进行初始化<br>
2.使用java.lang.reflect包方法时对类进行初始化<br>
3.初始化一个类时发现其父类未初始化,则对其父类先初始化
4.当虚拟机启动时,用户需要指定一个主类main,虚拟机会优先执行这个主类的初始化<br>
2.类加载过程<br>
1.加载<br>
2.连接
验证
保证二进制文件流信息符合java虚拟机规范<br>
-Xverify:none 可以通过参数关闭,缩短类加载时间<br>
准备
为静态成员变量分配内存空间并初始化0值或null<br>
public static x = 10,在准备阶段初始值为0,而不是10,如果x被final修饰,则为10<br>
3.初始化
调用clinit方法,<br>
初始化的过程,其实调用类初始化的过程,完成对static变量的手动赋值及主动调用静态代码块<br>
4.使用<br>
5.卸载