1.加载(1将Class文件字节码加载到内存中,
2将静态数据转换方法区的动态数据运行时的数据结构,
3然后生成一个代表这个类的java.lang.Class对象)
2.链接(将Java类的二进制代码合并到jvm的运行状态之中的过程)
a.验证;确保加载信息符合规范,没有安全方面的问题
b.准备:正式为类变量static分配内存变更设置变量默认初始值阶段,这些内存都在方法去分配
c.解析:虚拟机常量池内的符号引用(常量名)替换为直接引用(地址)的过程
3初始化:
1.执行类的构造器<clinit>()方法的过程。
类构造器<clinit>()方法是由编译期自动收集类中变量赋值动作和静态代码块中的语句合并产生(类构造器是构造类信息的,不是构造该类对象的构造器)
2.当初始化一个类的时候,如果发现其他父类还没有进行初始化则需要先按初始化父类
3.虚拟机会保证一个类,<clinit>()方法在多线程环境中被正确加锁和同步