本文共 4062 字,大约阅读时间需要 13 分钟。
Each field is described by a field_info
structure.
No two fields in one class
file may have the same name and descriptor ().
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:
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. 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 . 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 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 are reserved for future use. They should be set to zero in generated class
files and should be ignored by Java Virtual Machine implementations.
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 () which represents a valid unqualified name denoting a field ().
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 () which represents a valid field descriptor ().
The value of the attributes_count
item indicates the number of additional attributes of this field.
Each value of the attributes
table must be an attribute_info
structure ().
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 .
The rules concerning attributes defined to appear in the attributes
table of a field_info
structure are given in .
The rules concerning non-predefined attributes in the attributes
table of a field_info
structure are given in .
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
.
转载地址:http://vkawb.baihongyu.com/