52
ClassFile {
u4 magic;
u2 minor_version;
u2 major_version;
u2 constant_pool_count;
cp_info constant_pool[constant_pool_count-1];
u2 access_flags;
u2 this_class;
u2 super_class;
u2 interfaces_count;
u2 interfaces[interfaces_count];
u2 fields_count;
field_info fields[fields_count];
u2 methods_count;
method_info methods[methods_count];
u2 attributes_count;
attribute_info attributes[attributes_count];
}
(здесь и далее u1, u2, u4 - целые числа размером 8, 16 и 32 бит с порядком байтов старший байт по младшему адресу). Рассмотрим последовательно все поля.
· magic - так называемое магическое число, имеющее в шестнадцатеричной записи вид 0xCAFEBABE;
· minor_version, major_version - версия формата файла, по ней определяется совместимость данного файла с конкретной версией JVM;
· constant_pool_count - количество элементов в Constant_pool плюс единица;
· constant_pool - область констант - массив структур переменного размера, представляющих те или иные константные значения. Обращения в область констант производятся по индексу (индексация начинается с единицы; индексы, следующие за позициями констант, представляющих числа типов long и double, не используются). Форматы констант различных видов будут рассмотрены ниже;
· access_flags - комбинация битовых флагов, определяющих права доступа и некоторые другие характеристики класса:
Флаг
Значение
Смысл
ACC_PUBLIC
0x0001
Доступен из-за пределов пакета
ACC_FINAL
0x0010
Запрещено наследование от данного класса
ACC_SUPER
0x0020
В методах данного класса требуется использовать принятую в Java2 трактовку команды invokespecial
ACC_INTERFACE
0x0200
Интерфейс (является классом специального вида)
ACC_ABSTRACT
0x0400
Абстрактный класс
· this_class, super_class - индексы структур в области констант, ссылающихся на данный класс и его класс-предок;
· interfaces_count - число интерфейсов, реализуемых данным классом;
· interfaces - массив индексов структур в области констант, ссылающихся на интерфейсы, реализуемые данным классом;
· fields_count - количество полей в данном классе;
· fields - массив структур field_info, описывающих поля класса. Формат структуры field_info будет рассмотрен ниже;
· methods_count - количество методов;
· methods - массив структур method_info, описывающих методы класса. Формат структуры mettho_info будет рассмотрен ниже. Конструкторы и статические инициализаторы представляются методами со специальными именами <init> и <clinit>;
· attributes_count - количество атрибутов класса;
· attributes - массив структур-атрибутов класса (поля, методы и байт-код методов также могут иметь свои атрибуты). Каждая такая структура в начале имеет два обязательных поля, описывающих тип атрибута и его размер. К классу могут быть применены следующие стандартные атрибуты: SourceFile - указывает на файл исходного текста, из которого был получен данный файл класса, и Deprecated - класс оставлен для совместимости со старым кодом и его использование не рекомендуется. Возможно создание атрибутов нестандартных типов, но они будут игнорироваться средой выполнения.
field_info {
Страницы: 1, 2, 3, 4, 5