java class 文件结构

04234746_ufW4.jpg

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 个字节长度;

04234746_jqvO.jpg

222049_61TE_3300098.png

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

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

04234746_kkf1.jpg

7、this_class 类索引 u2;

8、super_class 父类索引 u2;

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

10、interfaces 接口 u2 * interfaces_count.lenght;

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

12、fields 字段 

04234746_ORY3.jpg

access_flag:

04234746_NVSK.jpg

04234746_rLxN.jpg

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

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

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

13、methods_count 方法个数 u2;

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

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

  

转载于:https://my.oschina.net/u/3300098/blog/1528988

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值