类的生命周期图:
从大的方面说类加载阶段分为三个步骤:
加载,链接,初始化。
1.类文件结构:
ClassFile { u4 magic; //Class 文件的标志:魔数 java中编译后是cafebabe u2 minor_version;//Class 的次版本号 u2 major_version;//Class 的主版本号 JDK版本号 u2 constant_pool_count;//常量池的数量 cp_info constant_pool[constant_pool_count-1];//常量池中的内容 u2 access_flags;//Class 的访问标志 标识当前类是接口还是普通类等 u2 this_class;//当前类 全限定名 u2 super_class;//父类 全限定名 u2 interfaces_count;//接口 u2 interfaces[interfaces_count];//一个类可以实现多个接口 u2 fields_count;//Class 文件的字段属性 成员变量 field_info fields[fields_count];//一个类会可以有个字段 u2 methods_count;//Class 文件的方法数量 类实现的方法 method_info methods[methods_count];//一个类可以有个多个方法 u2 attributes_count;//此类的属性表中的属性数 attribute_info attributes[attributes_count];//属性表集合}
2.类加载前的准备阶段:
编译期处理
所谓的 语法糖 ,其实就是指 java 编译器把 .java 源码编译为 .class 字节码的过程中,自动生成和转换的一些代码,主要是为了减轻程序员的负担。
比如:默认添加构造函数:
public class Candy1 {
}
编译期优化后,会生成这些代码的.class文件