java class 文件结构_java class 文件结构

本文介绍了Java Class文件的基本结构,包括魔数、版本号、常量池等关键组成部分,并详细解释了这些部分的作用及如何帮助虚拟机加载和运行类。

b0026ca4c2e30286edaf8422cae9bb28.png

u1:占一个字节,u2占两个字节,u4占4个字节,u8占8个字节

1、magic 魔数 u4;作用是这个文件是否能被虚拟机接受的class 文件;值为0xCAFEBABE(咖啡宝贝?);

2、minor_version 次版本号 u2;

3、major_version 主版本号 u2;  2和3都标示的是jdk的版本号;

4、constant_pool_count 常量池计数值 u2;

5、constant_pool 常量 总长度为constant_pool_count.lenght 个字节长度;

be0ddd353bea750f334cb2d990ce9075.png

9ec3f5daa445cfb49df9be09a293243f.png

常量池就是按照上面的规则进行读取,先找tag,找到对应constant类型,然后对应去找长度,找值;

6、access_flags 访问标记 u2; 这个标记用于识别一些类或者接口层次的访问信息,包括这个class 是类还是接口,是否定义为public类型;是否定义为abstract 类型;

78dfe106b3eeeeb29845db052c5e7919.png

7、this_class 类索引 u2;

8、super_class 父类索引 u2;

9、interfaces_count 接口数量 u2;一个类里面可以有多个接口;

10、interfaces 接口 u2 * interfaces_count.lenght;

11、field_count字段 个数 u2;他是类变量和实例变量的总和;

12、fields 字段

43277df3ddbd6e278a3875c390b428bb.png

access_flag:

296f4a131a2768b2477fc8756bf8ed79.png

658853ef3df60b960bca10c1aac66377.png

字段的读取都是一步步的,按照规则来读取字段,结构也不难。

name_index:是对常量池的引用,代表着字段的简单名称以及字段;

descriptor_index:也是对常量池的引用,代表着方法的描述符(void inc()描述符为 --》()V:v 标识void)

13、methods_count 方法个数 u2;

14、methods 方法:文件结构和fields 相仿;

方法之间的代码被编译成字节口令之后,存放在方法属性表集合中一个名为(Code)的属性里面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值