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 |
| 0x0001 | Declared |
| 0x0002 | Declared |
| 0x0004 | Declared |
| 0x0008 | Declared |
| 0x0010 | Declared |
| 0x0040 | Declared |
| 0x0080 | Declared |
| 0x1000 | Declared synthetic; not present in the source code. |
| 0x4000 | Declared as an element of an |
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 |
| | signed byte |
| | Unicode character code point in the Basic Multilingual Plane, encoded with UTF-16 |
| | double-precision floating-point value |
| | single-precision floating-point value |
| | integer |
| | long integer |
| | an instance of class ClassName |
| | signed short |
| | |
| | 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
.