Class文件结构和字节码指令

1.Class文件结构

Class文件具有平台无关性,所有运行平台的字节码文件格式都是统一的。Class文件也具有向后兼容的特性,Class文件结构在JDK1.2的时候就已经规定好了。
Class文件是一组以8字节为单位的二进制流文件,各个数据项按照严格的顺序排列,中间没有任何的分隔符,Class文件有两种数据类型:
无符号数:基本的数据类型,以u1、u2、u4、u8来分别代表1个字节、2个字节、4个字节、8个字节的无符号数,无符号数可以用来描述数字、引用等。
:表是由多个无符号数或者其它表作为数据项构成的符合数据类型,以"_info"结尾标识。

1.1 魔数cafe babe和Class文件版本

每个Class文件的前4个字节称之为魔数,固定是CAFE BABE,它是确定这个文件是不是一个Class文件的标识。
紧接着魔数的后4个字节分别是次版本号、主版本号,JDK的主版本号是从45开始,以后每次升级就是+1。

1.2 常量池

在这里插入图片描述

常量池中的常量数量是不固定的,常量池入口用u2类型表示,占用2个字节,这个常量池容量是从1开始记而不是0。常量池里面主要存放两大类常量:字面量和符号引用。

1.2.1 字面量

类文件中定义的文本字符串、常量值等。

1.2.2 符号引用

类和接口的全限定名、字段的名称和描述符、方法的名称和描述符等。

1.3 访问标志

紧接着2个字节用于标识一些类或者接口层次的访问信息,例如class是类还是接口、是否是public、是否是抽象类、是否是不可变类等。

1.4 类索引、父类索引和接口索引集合

类索引和父类索引是一个u2类型表示,接口索引集合是一组u2结构表示,Class文件通过这三个信息来确定该类的继承关系。

1.5 字段表集合

描述接口或者类中声明的变量Field,包括类变量和成员变量,但是不会包括父类的字段。

1.6 方法表集合

描述了方法的定义,包括访问标志、名称索引、描述符索引、属性表集合等。

1.7 属性表集合

Class文件、字段表集合、方法表集合都有自己的属性表集合,用来描述专有信息,例如方法表集合的代码指令就存在Code属性表里。

2.字节码指令相关(非重点)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Minor王智

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值