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.









