JVM:1.class文件

根据Java虚拟机规范的规定,Class文件格式采用一种类似于C语言结构体的伪结构来存储数据,这种伪结构中只有两种数据类型: 无符号数和表,后面的解析都要以这两种数据类型为基础,所以这里要先介绍这两个概念。
无符号数属于基本的数据类型,以 u1、u2、u4、u8来分别代表1个字节、2个字节、4个字节和8个字节的无符号数,无符号数可以用来描述数字、索引引用、数量值或者按照UTF-8编码构成字符串值。
是由多个无符号数或者其他表作为数据项构成的复合数据类型, 所有表都习惯性地以“_info”结尾。表用于描述有层次关系的复合结构的数据,整个Class文件本质上就是一张表,它由表6-1所示的数据项构成。
JVM:1.class文件_第1张图片


class文件描述:(图1)
JVM:1.class文件_第2张图片

1.前四个字节是java魔数:唯一作用是确定这个文件是否为一个能被虚拟机接受的Class文件 (CAFEBABE)
2.紧接着的四个字节表示java版本 00 00 00 33 表示jdk1.7 (5~6表示次版本,7~8表示主版本)
3.接下来是常量池描述,0024是常量池数量描述,说明有35(下标从1开始)个常量.
下图:常量池项目列表
JVM:1.class文件_第3张图片
提示:可以使用javap -verbose  *.class
示例:
JVM:1.class文件_第4张图片
    红色区间内为常量池数据 黄色为每个常量的tag
4.访问标识
    在常量池结束之后,紧接着的 两个字节代表访问标志(access_flags)
JVM:1.class文件_第5张图片

示例:

0021标识是public并且是jdk1.2编译出来的类

5.类索引,父类索引(java是单继承),接口索引集合
示例:

红色表示类索引位置  常量池第一位
蓝色父类索引 常量池第三个
绿色表示接口索引集合大小  0

6.字段表
JVM:1.class文件_第6张图片
access_flags占用四位,具体值对应的描述如下图:
JVM:1.class文件_第7张图片
字段类型描述符表:
JVM:1.class文件_第8张图片

示例:

因为代码中没有字段所以字段表数量为0

7.方法表
8.属性表





你可能感兴趣的:(JVM:1.class文件)