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 flagsFlag NameValueInterpretationACC_PUBLIC
0x0001Declaredpublic
; may be accessed from outside its package.ACC_PRIVATE
0x0002Declaredprivate
; usable only within the defining class.ACC_PROTECTED
0x0004Declaredprotected
; may be accessed within subclasses.ACC_STATIC
0x0008Declaredstatic
.ACC_FINAL
0x0010Declaredfinal
; never directly assigned to after object construction (JLS §17.5).ACC_VOLATILE
0x0040Declaredvolatile
; cannot be cached.ACC_TRANSIENT
0x0080Declaredtransient
; not written or read by a persistent object manager.ACC_SYNTHETIC
0x1000Declared synthetic; not present in the source code.ACC_ENUM
0x4000Declared as an element of anenum
.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 itsACC_PUBLIC
,ACC_PRIVATE
, andACC_PROTECTED
flags set (JLS §8.3.1), and must not have both itsACC_FINAL
andACC_VOLATILE
flags set (JLS §8.3.1.4).Fields of interfaces must have theirACC_PUBLIC
,ACC_STATIC
, andACC_FINAL
flags set; they may have theirACC_SYNTHETIC
flag set and must not have any of the other flags in Table 4.5-A set (JLS §9.3).TheACC_SYNTHETIC
flag indicates that this field was generated by a compiler and does not appear in source code.TheACC_ENUM
flag indicates that this field is used to hold an element of an enumerated type.All bits of theaccess_flags
item not assigned in Table 4.5-A are reserved for future use. They should be set to zero in generatedclass
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 theconstant_pool
table. Theconstant_pool
entry at that index must be aCONSTANT_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 theconstant_pool
table. Theconstant_pool
entry at that index must be aCONSTANT_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 anattribute_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 theattributes
table of afield_info
structure are listed in Table 4.7-C.The rules concerning attributes defined to appear in theattributes
table of afield_info
structure are given in §4.7.The rules concerning non-predefined attributes in theattributes
table of afield_info
structure are given in §4.7.1.