一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情。
Class文件是
组以8个字节为基础单位的二进制流,各个数据项
目严格按照顺序紧凑地排列在文件之中,中间没有添加任何分隔
符,这使得整个Class文件中存储的内容几乎全部是程序运行的必
要数据,没有空隙存在。
根据《Java虚拟机规范》的规定,Class文件格式采用
种类似于
C语言结构体的伪结构来存储数据,这种伪结构中只有两种数据
类型:
“
无符号数
”
和
“
表
”
。
无符号数属于基本的数据类型,以u1、u2、u4、u8来分别代表1
个字节、2个字节、4个字节和8个字节的无符号数,无符号数可
以用来描述数字、索引引用、数量值或者按照UTF
8编码构成字
符串值。
表是由多个无符号数或者其他表作为数据项构成的复合数据类型,
为了便于区分,所有表的命名都习惯性地以
“
_info
”
结尾。表用于
描述有层次关系的复合结构的数据,整个Class文件本质上也可以
视作是
一张表,这张表由表6
-1所示的数据项按严格顺序排列构成
每个Class文件的头4个字节被称为魔数(Magic Number),它的唯
一作用是确定这个文件是否为
一个能被虚拟机接受的Class文件。
紧接着魔数的4个字节存储的是Class文件的版本号:第5和第6个字节是次版本号(Minor Version),第7
和第8个字节是主版本号(Major Version)。Java的版本号是从45开始的,JDK 1.1之后的每个JDK大版本
发布主版本号向上加1