u2 access_flags;
u2 name_index;
u2 descriptor_index;
u2 attributes_count;
attribute_info attributes[attributes_count];
}
Здесь:
· access_flags - комбинация битовых флагов, определяющих права доступа и некоторые другие характерист ики поля:
Имя флага
Значение
Смысл
ACC_PUBLIC
0x0001
Поле объявлено как public
ACC_PRIVATE
0x0002
Поле объявлено как private
ACC_PROTECTED
0x0004
Поле объявлено как protected
ACC_STATIC
0x0008
Поле является статическим
ACC_FINAL
0x0010
Поле объявлено как final и не может быть изменено после начальной инициализации
ACC_VOLATILE
0x0040
Поле объявлено как volatile
ACC_TRANSIENT
0x0080
Поле объявлено как transient - не сохранятся при сериализации
· name_index - индекс строковой константы-имени поля в Constant Pool;
· descriptor_index - индекс строковой константы-дескриптора поля (описывает тип) в Constant Pool;
· attributes_count - число атрибутов поля;
· attributes - атрибуты поля. К полям могут быть применены стандартные атрибуты Deprecated (см. выше), Synthetic (поле создано компилятором и не объявлено явно в исходном тексте) и ConstantValue (инициализирующее значение для статического поля).
method_info {
· access_flags - битовые флаги, определяющие права доступа и некоторые дополнительные свойства метода:
Flag Name
Value
Interpretation
Метод объявлен как public
Метод объявлен как private
Метод объявлен как protected
Метод является статическим
Метод является финальным и не может быть замещен
ACC_SYNCHRONIZED
0x0020
Метод объявлен как synchronized
ACC_NATIVE
0x0100
Метод является «родным» и содержит код, непосредственно выполняющийся физическим процессором
ACC_ABSTRACT
0x0400
Метод является абстрактным
ACC_STRICT
0x0800
Устанавливает «строгий» режим работы с вещественными числами (только в Java 2).
· name_index, descriptor_index, attributes_count - аналогично field_info;
· attributes - атрибуты метода. Методы могут иметь следующие стандартные атрибуты:
o Deprecated, Synthetic - аналогично соответствующим атрибутам полей;
o Exceptions - описание исключений, которые может генерировать метод. Нужно отметить, что обязательное описание исключений не является необходимым требованием для корректного выполнения;
o Code - собственно говоря, байт-код метода.
Code_attribute {
u2 attribute_name_index;
u4 attribute_length;
u2 max_stack;
u2 max_locals;
u4 code_length;
u1 code[code_length];
u2 exception_table_length;
{ u2 start_pc;
u2 end_pc;
u2 handler_pc;
u2 catch_type;
} exception_table[exception_table_length];
· attribute_name_index, attribute_length - стандартные для любого атрибута поля, описывающие его тип и размер;
· max_stack - предельный размер стека операндов для метода;
· max_locals - предельное количество локальных переменных метода (включая формальные параметры);
· code_length - размер байт-кода метода в байтах;
· code - собственно говоря, байт-код;
· exception_table_length - количество защищенных блоков;
· exception_table - таблица защищенных блоков (обработчиков исключений). Каждая ее запись имеет следующие поля:
o start_pc - индекс начала защищенного блока в массиве байт-кода,
o end_pc - индекс конца защищенного блока,
o handler_pc - индекс начала обработчика,
o catch_type - тип обрабатываемого исключения (индекс в Constant Pool) или 0 для блока try ... finally;
· attributes_count - число атрибутов;
· attributes - атрибуты кода метода. Могут использоваться стандартные атрибуты LineNumberTable и LocalVariableTable, содержащие отладочную информацию.
[модификаторы_доступа] class <имя_класса>;
Страницы: 1, 2, 3, 4, 5