JVM Class 文件结构详解三

      在文章 JVM Class 文件结构详解二中,介绍了Java Class 文件的access_flags、this class、super class、interfaces、fields等信息,本篇文章继续介绍Class文件的其他内容。

1、methods_count 和methods

      在上篇文章介绍了Class关于字段表的内容,而关于方法表的内容与其类似。首先看下方法表的结构,如下图:

                

      其中方法的访问标志access_flags,u2数据类型,方法的访问标志如下:

                

      对于示例代码,下图中红色的区域为本部分,如下:

                

      其中:0x0002表示methods_count,u2类型,为2,表示有两个方法:代码中的returnValue方法和方法init(自动添加的)。

                 0x0001表示第一个方法的访问标志,u2类型,为1,表示为ACC_PUBLIC,即方法的修饰符为public的。

                 0x0007表示第一个方法的name_index,u2类型,为7,从下图中可查为方法名为“<init>”。

                 0x0008表示描述符索引值,u2类型,为8,从下图中查询对应的常量为()V。

                 0x0001表示属性计数器,u2类型,为1,表示此方法的属性表集合有一项属性,属性名称的索引值为下面的值。

                 0x0009表示属性名称的索引值,为9,查询下图常量表为Code,说明此属性是方法的字节码描述。

                        注意:方法内的代码编译成字节码指令后,存放在方法属性表集合中一个名称为“Code”的属性里面。

              

      下图为“Code”属性:

                

2、attributes_count和attributes

      属性表attribute_info在字段表、方法表等都出现过,用于描述某些场景专有的信息。

      包含的属性如Code、ConstantValue、Exceptions等都具有各自的结构,应用在不同的场合,这里不一一展开。


      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值