类文件结构
来自随意问技术百科
- 魔数(4字节):0XCAFEBABE
- Class文件版本(4字节):次版本号(2字节)、主版本号(2字节)
- 常量池(不固定):常量池计数器容量(2字节 实际数=计数值-1,从索引1开始)、常量表(11种类型)
- UTF-8编码的字符串
- 整型字面量
- 浮点型字面量
- 长整型字面量
- 双精度浮点型字面量
- 类或接口的符号引用
- 字符串类型字面量
- 字段的符号应用
- 类中方法的符号引用
- 接口中方法的符号引用
- 字段或方法的部分符号引用
- 访问标志(2字节)
- 类索引(2字节)
- 父类索引(2字节)
- 接口索引集合(>2字节):计数器容量(2字节)、集合表
- 字段表集合:计数器容量(2字节)、access_flag、name_index、descriptor_index(描述符)、属性表集合
- 方法表集合:计数器容量(2字节)、access_flag、name_index、descriptor_index(描述符)、属性表集合
- 属性表集合:在class文件、字段表、方法表中都可以携带字节的属性表集合,attribute_count(2字节)(属性表计数器)、属性表(大部分代码信息)
- 常量属性ConstantValue:JVM规范只要求static,而sun javac选择的是如果字段是final static修饰的基本类型或String,生成ConstantValue在加载的连接过程中进行初始化;其他则<cinit>的时候初始化。