¶Field(字段)
每个字段都是由一个field_info结构体来描述。在一个class文件中不可能有两个相同字段名和描述符的字段。
field_info结构体格式:
1 | field_info { |
¶access_flags
字段的访问修饰符标志有以下这些:
- 一个类的字段可能有ACC_PUBLIC,ACC_PRIVATE,ACC_PROTECTED三种中的一种访问标志,并且必不可能有ACC_FINAL和ACC_VOLATILE访问标志。
- 一个接口的字段必须有ACC_PUBLIC,ACC_STATIC,ACC_FINAL三个访问标志被设置,并且ACC_SYNTHEIC可能会被设置,其他的访问标志必不可能被设置。
- ACC_SYNTHEIC访问标志显示了这个字段是由编译器生成的,并且不会在写在源码中。
- ACC_ENUM访问标志显示了这个字段是一个枚举类型的一个元素。
- 在以上表中未分配的访问标志项的所有位以待将来使用。它们在一个class文件中被设置为0,而且java虚拟机实现会忽视它们。
¶name_index
name_index的值必须是是常量池表中一个有效索引。这个常量池索引指向的常量池项必须是一个代表一个有效unqualified名的CONTSANT_Utf-8_info结构体,这个结构体表示的就是这个字段。
¶descriptor_index
descriptor_index的值必须是常量池表中的一个有效索引。这个索引指向的常量池项必须是一个CONTSANT_Utf-8_info结构体,这个结构体代表一个有效的字段描述符。
¶attribute_count
attribute_count的值表示这个字段的附加属性的数量。
¶attributes[attributes_count]
- 这个属性表的每个值必须是一个attribute_info结构体。以下就是attribute_info结构体:
1 | attribute_info { |
- 一个字段可能有与它有关联的一些可选属性。
- 这些属性的规范定义在以下field_info结构体的属性表中表示:
- 查看属性表的详情请点击这里