Class文件结构
根据《Java虚拟机规范》的规定,class文件结构如下表所示。
类型 | 说明 |
---|---|
u4 | Magic(魔数) |
u2 | Minor Version(副版本号) |
u2 | Major Version(主版本号) |
u2 | Constant Pool Count(常量池计数) |
cp_info | Constant Pool[常量池计数-1] (常量池数组) |
u2 | Access Flags(访问标志,如public) |
u2 | This Class(类索引,在常量池表中的索引) |
u2 | Super Class(父类索引,在常量池表中的索引) |
u2 | Interfaces Count(接口总数) |
u2 | Interfaces[接口总数] |
u2 | Fields Count (字段总数) |
field_info | Fields[字段总数] (字段表) |
u2 | Methods Count(方法总数) |
method_info | Methods[方法总数-1] (方法表) |
u2 | Attributes Count(属性总数) |
attribute_info | Attributes[属性总数](属性表) |
其中类型u2、u4是《Java虚拟机规范》中定义的类型,分别表示两个字节、四个字节,而cp_info、field_info、method_info、attribute_info都是结构体,与class文件结构一样,它们也有固定的格式,这些结构体我们后面在实现class文件结构解析器过程中再详细介绍。
从表“class文件结构”可以看出,一个完整的class文件按照顺序存储了魔数、版本号、常量池计数、常量池数组、该类的访问标志、this符号索引、继承的父类的符号索引、实现的接口总数与接口表、字段总数与字段表、方法总数与方法表、属性总数与属性表。
发布于:2021 年 07 月 10 日
作者: 吴就业
GitHub链接:https://github.com/wujiuye/JVMByteCodeGitBook
链接: https://www.wujiuye.com/ebook/JVMByteCodeGitBook/chapter/chapter02_00.md
来源: Github Pages 开源电子书《深入浅出JVM字节码》(《Java虚拟机字节码从入门到实战》的第二版),未经作者许可,禁止转载!