0
点赞
收藏
分享

微信扫一扫

ClassFile之Fields

草原小黄河 2022-02-15 阅读 77
sedjavaide


Each field is described by a ​​field_info​​ structure.

No two fields in one ​​class​​​ file may have the same name and descriptor (​​§4.3.2​​).

The structure has the following format:

field_info {
u2 access_flags;
u2 name_index;
u2 descriptor_index;
u2 attributes_count;
attribute_info attributes[attributes_count];
}

The items of the ​​field_info​​ structure are as follows:

access_flags

The value of the ​​access_flags​​​ item is a mask of flags used to denote access permission to and properties of this field. The interpretation of each flag, when set, is specified in ​​Table 4.5-A​​.


Table 4.5-A. Field access and property flags

Flag Name

Value

Interpretation

​ACC_PUBLIC​

0x0001

Declared ​​public​​; may be accessed from outside its package.

​ACC_PRIVATE​

0x0002

Declared ​​private​​; usable only within the defining class.

​ACC_PROTECTED​

0x0004

Declared ​​protected​​; may be accessed within subclasses.

​ACC_STATIC​

0x0008

Declared ​​static​​.

​ACC_FINAL​

0x0010

Declared ​​final​​; never directly assigned to after object construction (JLS §17.5).

​ACC_VOLATILE​

0x0040

Declared ​​volatile​​; cannot be cached.

​ACC_TRANSIENT​

0x0080

Declared ​​transient​​; not written or read by a persistent object manager.

​ACC_SYNTHETIC​

0x1000

Declared synthetic; not present in the source code.

​ACC_ENUM​

0x4000

Declared as an element of an ​​enum​​.


Fields of classes may set any of the flags in ​​Table 4.5-A​​​. However, each field of a class may have at most one of its ​​ACC_PUBLIC​​​, ​​ACC_PRIVATE​​​, and ​​ACC_PROTECTED​​​ flags set (JLS §8.3.1), and must not have both its ​​ACC_FINAL​​​ and ​​ACC_VOLATILE​​ flags set (JLS §8.3.1.4).

Fields of interfaces must have their ​​ACC_PUBLIC​​​, ​​ACC_STATIC​​​, and ​​ACC_FINAL​​​ flags set; they may have their ​​ACC_SYNTHETIC​​​ flag set and must not have any of the other flags in ​​Table 4.5-A​​ set (JLS §9.3).

The ​​ACC_SYNTHETIC​​ flag indicates that this field was generated by a compiler and does not appear in source code.

The ​​ACC_ENUM​​ flag indicates that this field is used to hold an element of an enumerated type.

All bits of the ​​access_flags​​​ item not assigned in ​​Table 4.5-A​​​ are reserved for future use. They should be set to zero in generated ​​class​​ files and should be ignored by Java Virtual Machine implementations.

name_index

The value of the ​​name_index​​​ item must be a valid index into the ​​constant_pool​​​ table. The ​​constant_pool​​​ entry at that index must be a ​​CONSTANT_Utf8_info​​​ structure (​​§4.4.7​​​) which represents a valid unqualified name denoting a field (​​§4.2.2​​).

descriptor_index

The value of the ​​descriptor_index​​​ item must be a valid index into the ​​constant_pool​​​ table. The ​​constant_pool​​​ entry at that index must be a ​​CONSTANT_Utf8_info​​​ structure (​​§4.4.7​​​) which represents a valid field descriptor (​​§4.3.2​​).

attributes_count

The value of the ​​attributes_count​​ item indicates the number of additional attributes of this field.

attributes[]

Each value of the ​​attributes​​​ table must be an ​​attribute_info​​​ structure (​​§4.7​​).

A field can have any number of optional attributes associated with it.

The attributes defined by this specification as appearing in the ​​attributes​​​ table of a ​​field_info​​​ structure are listed in ​​Table 4.7-C​​.

The rules concerning attributes defined to appear in the ​​attributes​​​ table of a ​​field_info​​​ structure are given in ​​§4.7​​.

The rules concerning non-predefined attributes in the ​​attributes​​​ table of a ​​field_info​​​ structure are given in ​​§4.7.1​​.


Field Descriptors

Table 4.3-A. Interpretation of field descriptors

FieldType term

Type

Interpretation

​B​

​byte​

signed byte

​C​

​char​

Unicode character code point in the Basic Multilingual Plane, encoded with UTF-16

​D​

​double​

double-precision floating-point value

​F​

​float​

single-precision floating-point value

​I​

​int​

integer

​J​

​long​

long integer

​L​​ ClassName ​​;​

​reference​

an instance of class ClassName

​S​

​short​

signed short

​Z​

​boolean​

​true​​​ or ​​false​

​[​

​reference​

one array dimension


The field descriptor of an instance variable of type ​​int​​​ is simply ​​I​​.

The field descriptor of an instance variable of type ​​Object​​​ is ​​Ljava/lang/Object;​​​. Note that the internal form of the binary name for class ​​Object​​ is used.

The field descriptor of an instance variable of the multidimensional array type ​​double[][][]​​​ is ​​[[[D​​.






















举报

相关推荐

ClassFile之Attributes

ClassFile

classfile解析

Cow and Fields

Fields Division

Jira使用 --- Fields

Copy fields from …

0 条评论