每天学一点:java虚拟机7

Class文件:
access_flags:
access_flags为两个字节,紧跟常量池,展示了文件中定义的类或接口的几段信息。
access_flags中所有未使用的位都必须有编译器置0,而且java虚拟机必须忽略它。

this_class:
两个字节,他是一个对常量池的索引。this_class位置的常量池入口必须为CONSTANT_Class_info标。该表由两部分组成:一个标签和name_index。
标签:一个具有CONSTANT_Class值的常量,name_index位置的常量池入口为一个包含了类或接口权限定名的CONSTANT_Utf8_info表。
this_class指示一个指向常量池的索引。

super_class:
两个字节的常量池索引:一个指向该类超类全限定名的CONSTANT_Class_info入口。
对于Object类,super_class的值为0,对于接口,常量池入口super_class位置的项为java.lang.Object。

interfaces_count、interfaces
在文件中由该类直接实现或者由该接口所扩展的父接口的数量。这个技术后面,是名为interfaces的数组,包含了对每个由该类或者接口直接实现的父接口的常量池索引。
超类按照在implements子句和extends子句汇总出现的顺序(从左到右)在这个数据中显现。

fields_count、fields
首先是名为fields_count的计数,它是类变量和实例变量的字段的数量总和。
在fields列表中,不列出超类或者父接口继承而来的字段。
每个field_info表都展示一个字段的信息,如果该字段被声明为final,field_info表还会展示其常量值。

methods_count和methods
首先是名为methods_count的计数。双字节,对该类或者接口中声明的所有方法的总计数,从超类或者父接口汇总继承的方法不被计入。

attributes_count、attributes
给出了该文件中类或者接口所定义的属性的基本信息。每个attribute_info的第一项是指向常量池中CONSTANT_Utf8_info表的索引。

特殊字符串:
常量池中容纳的符号引用包括三种特殊的字符串:权限定名、简单名称、描述符。
所有的符号引用都包括类或者接口的全限定名。

猜你喜欢

转载自baoxiaofei.iteye.com/blog/2272495