一、类的生命周期 连接阶段之验证
连接阶段的第一个环节是验证,验证的主要目的是检测Java字节码文件是否遵守了<Java虚拟机规范>中的约束。这个阶段一般是不需要程序员进行处理。
主要包含如下四个部分,具体详见<<Java虚拟机规范>>:
1、文件格式验证,比如文件是否以0xCAFEBABE开头,主次版本号是否满足当前Java虚拟机版本要求。
其中这些开头通常又称之为魔术值。
如果魔术值被篡改会校验失败。
2、元信息验证,例如类必须有父类(super不能为空)
java中的类,一般都有父类
3、验证程序执行指令的语义,比如方法内的指令执行到一般强行跳转到其他方法中区。
4、符号引用验证,例如是访问了其他类中的private方法等。
二、准备阶段
给静态变量赋初值
赋值为1的时候,会发生在初始化阶段,在准备阶段会赋值0;
为什么准备阶段要赋值:可以这样理解,声明的变量原来的内存存储区域还有垃圾数据,赋值,可以把垃圾数据覆盖掉。
三、解析-把符号引用替换为直接引用
直接引用相比符号引用效率要高。