
上QQ阅读APP看书,第一时间看更新
2.3 field_info和method_info
本节来看看Class文件格式里的field_info和method_info,图2-6所示为它们的数据结构伪代码,相当简单。

图2-5 常量池实例

图2-6 field_info和method_info数据结构伪代码
图2-6所示为field_info和method_info对应的数据结构,二者有完全一样的成员变量。
·access_flags为访问标志,成员变量和成员函数的访问标志略有不同。
·name_index为指向成员变量或成员函数名字的Utf8_info常量项。
·descriptor_index也指向Utf8_info常量项,其内容分别是描述成员变量的FieldDescriptor和描述成员函数的MethodDescriptor。
·attributes为属性信息,成员域和成员函数都包含若干属性。
思考 不过读者不知道有没有想过这样一个问题,既然method_info描述的是一个成员函数,那么这个函数对应的代码经过编译后得到的Java字节码存储在什么地方?能提出这个问题,说明读者在阅读本文的时候是有思考的。此问题的答案其实很简单:函数的内容经编译得到的Java字节码存储在属性中。本章后续内容将重点介绍它。
下面我们再来简单了解下访问标志。