设为首页 加入收藏

TOP

从 HelloWorld 看 Java 字节码文件结构(三)
2018-03-18 16:21:26 】 浏览:324
Tags:HelloWorld Java 字节 文件 结构
现的接口将按 implements 语句(如果这个类本身就是一个接口,则应当是extends语句)后的接口顺序从左到右排列在接口索引集合中。对于接口索引集合,入口第一项是 u2 类型的数据为接口计数器(interfaces_count),表示索引表的容量,而在接口计数器后则紧跟着所有的接口信息。如果该类没有实现任何接口,则该计数器值为0,后面接口的索引表不再占用任何字节。


这里 Demo 类的字节码文件中,因为并没有实现任何接口,所以紧跟着父类索引后的两个字节是0x0000,这表示该类没有实现任何接口。因此后面的接口索引表为空。


字段表集合用于描述接口或者类中声明的变量。这里说的字段包括类级变量和实例级变量,但不包括在方法内部声明的局部变量。


在类接口集合后的2个字节是一个字段计数器,表示总有有几个属性字段。在字段计数器后,才是具体的属性数据。字段表的每个字段用一个名为 field_info 的表来表示,field_info 表的数据结构如下所示:



因为我们并没有声明任何的类成员变量或类变量,所以在 Demo 的字节码文件中,字段计数器为 00 00,表示没有属性字段。


在字段表后的 2 个字节是一个方法计数器,表示类中总有有几个方法。在字段计数器后,才是具体的方法数据。方法表中的每个方法都用一个 method_info 表示,其数据结构如下:



Demo 类的字节码文件中,方法计数器的值为 00 02,表示一共有 2 个方法。


第 1 个方法。方法计数器后 2 个字节表示方法访问标识,这里是 00 01,表示其实 ACC_PUBLIC 标识,即该方法访问表示为 public。紧接着 2 个字节表示方法名称的索引,这里是 00 07 表示指向了常量池第 7 个常量,查阅可知其指向了<init>。紧接着的 2 个字节表示方法描述符索引项,这里是 00 08 表示指向了常量池第 8 个常量,查阅可知其指向了()V。紧接着 2 个字节表示属性表计数器,这里是 00 01 表示该方法一共有 1 个属性。紧接着的一连串就是属性表的内容。


到这里我们通过对 Hello World 的解析,从而对 Java 类文件结构有了一个全面的认识。进一步还简单了解了 Java 虚拟机以及 Java 虚拟机规范。希望读完这篇文章,大家能对 Java 类文件结构有一个深入的认识。


首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇30行Python代码实现人脸检测 下一篇排查Java的内存问题

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目