JVM学习笔记-字段(Fields)

31 篇文章 0 订阅
4 篇文章 0 订阅

 

Each field (class variable and instance variable) declared in a class or interface is described by a field_info table in the class file. The format of the field_info table is shown in Table 6-20.

在类或者接口中声明的每一个字段(类变量或者实例变量)都由class文件中的一个名为field_info的可变长度的表进行描述。在一个class文件中,不会存在两个具有相同名字和描述符的字段。需要注意的是尽管在Java程序设计语言中不会有两个相同名字的字段存在于同一个类或者接口中,但一个class文件中的两个字段可以拥有同一个名字——只要它们的描述符不同。换句话说,尽管在程序设计语言中无法在同一个类或者接口中定义两个具有同样名字和不同类别的字段,但是两个这样的字段却可以同时合法地出现在一个Javaclass文件中。表6-20中列出了field_info表的格式。

Table 6-20. Format of a field_info table

TypeName Count
u2access_flags1
u2name_index1
u2descriptor_index1
u2attributes_count1
attribute_info attributes attributes_count

Field_info表中各项如下所示:

access_flags

The modifiers used in declaring the field are placed into the fieldís access_flags item. Table 6-21 shows the bits used by each flag.

声明字段时使用的修饰符存放在字段的access_flags项中。表6-21列出了各个标志所使用的位。

Table 6-21. Flags in the access_flags item of field_info tables

Flag NameValueMeaning if SetSet By
ACC_PUBLIC0x0001Field is publicClasses and interfaces
ACC_PRIVATE0x0002Field is privateClasses only
ACC_PROTECTED0x0004Field is protectedClasses only
ACC_STATIC0x0008Field is staticClasses and interfaces
ACC_FINAL0x0010Field is finalClasses and interfaces
ACC_VOLATILE0x0040Field is volatileClasses only
ACC_TRANSIENT0x0080Field is transientClasses only

For fields declared in a class (not an interface), at most one of ACC_PUBLIC, ACC_PRIVATE, and ACC_PROTECTED may be set. ACC_FINAL and ACC_VOLATILE must not both be set. All fields declared in interfaces must have the ACC_PUBLIC, ACC_STATIC, and ACC_FINAL flags set.

类(不包括接口)中声明的字段,只能拥有ACC_PUBLIC,ACC_PRIVATE,ACC_PROTECTED这三个标志中的一个。ACC_FINAL和ACC_VOLATILE不能同时设置。所有接口中声明的字段必须有且只能有ACC_PUBLIC,ACC_STATIC和ACC_FINAL这三种标志。

All unused bits in access_flags must be set to zero and ignored by Java Virtual Machine implementations.

Access_flags中没有用到的位都被设为0,Java虚拟机实现将忽略它们。

name_index

The name_index gives the index of a CONSTANT_Utf8_info entry that gives the simple (not fully qualified) name of the field.

Name_index项提供了给出字段简单名称(不是全限定名)的CONSTANT_Utf8_info入口的索引。在class文件中的每一个字段的名称都必须符合Java程序设计语言中对名称的有效规定。

descriptor_index

The descriptor_index gives the index of a CONSTANT_Utf8_info entry that gives the descriptor of the field.

Descriptor_index提供了给出字段描述符的CONSTANT_Utf8_info入口的索引。

attributes_count and attributes

The attributes item is a list of attribute_info tables. The attributes_count indicates the number of attribute_info tables in the list. Two kinds of attributes defined by the Java Virtual Machine specification that may appear in this item are ConstantValue and Synthetic. These two attributes are described in detail later in this chapter.

Attributes项是由多个attribute_info表组成的列表。Attributes_count指出列表中attribute_info表的数量。一个字段在其列表中可以有任意数量的属性。由Java虚拟机规范定义的三种可能会出现在此项中的属性是:ConstantValue,Deprecated和Synthetic。Java虚拟机唯一需要识别的属性是ConstantValue属性。虚拟机实现必须忽略任何无法识别的属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值