类文件结构

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