я бітових прапорів, що визначають права доступу і деякі інші характеристики класу:
Прапор
Значення
Сенс
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 буде розглянуто нижче. Конструктори і статичні ініціалізатори представляються методами зі спеціальними іменами і ;
В· attributes_count - кількість атрибутів класу;
В· attributes - масив структур-атрибутів класу (поля, методи і байт-код методів також можуть мати свої атрибути). Кожна така структура на початку має два обов'язкових поля, описують тип атрибуту і його розмір. До класу можуть бути застосовані такі стандартні атрибути: SourceFile - вказує на файл вихідного тексту, з якого був отриманий даний файл класу, і Deprecated - клас залишений для сумісності зі старим кодом і його використання не рекомендується. Можливе створення атрибутів нестандартних типів, але вони будуть ігноруватися середовищем виконання.
Типи елементів Constant_pool
Кожен елемент сonstant_pool починається з однобайтное поля, що визначає його тип. Розмір і зміст іншої частини структури залежить від типу. Існують такі типи констант (елементів constant_pool):
В· CONSTANT_Class - вказує на клас. Містить індекс константи типу CONSTANT_Utf8, що зберігає дескриптор класу;
В· CONSTANT _Fieldref - вказує на поле класу. Містить індекси констант типу CONSTANT_Class і CONSTANT_NameAndType;
В· CONSTANT _Methodref вказує на метод класу (НЕ інтерфейсу). Містить індекси констант типу CONSTANT_Class і CONSTANT_NameAndType;
В· CONSTANT _InterfaceMethodref Вказує на метод інтерфейсу. Містить індекси констант типу CONSTANT_Class і CONSTANT_NameAndType;
В· CONSTANT_String - вказує на рядок, містить індекс константи типу CONSTANT_Utf8;
В· CONSTANT_Integer - містить ціле 32-розрядне число;
В· CONSTANT_Float - містить дійсне число одинарної точності;
В· CONSTANT_Long - містить ціле 64-розрядне число;
В· CONSTANT_Double - містить дійсне число подвійний точності;
В· CONSTANT_NameAndType - описує сигнатуру і ім'я методу або тип і ім'я поля. Містить індекси двох констант типу CONSTANT_Utf8, що зберігають відповідно ім'я і дескриптор типу (сигнатури);
В· CONSTANT_Utf8 - містить рядок у форматі Utf8 (символи Unicode представляються комбінаціями від 1 до 3-х байт, причому символи з кодами, що не перевищують 127, представляються одним байтом).
Дескриптори - це рядка, що описують типи і сигнатури методів в компактному форматі. Примітивні типи позначаються однією буквою, типи масивів - відкривають квадратними дужками в кількості, рівній розмірності масиву, перед позначенням базового типу. Класи описуються рядком, що містить ім'я класу з повним шляхом, при цьому замість точки роль роздільника імен пакетів і класу виконує слеш. У дескрипторах сигнатур методів у круглих дужках без роздільників перераховуються дескриптори типів параметрів; після закриває дужки знаходиться дескриптор типу значення, що повертається. Для усунення неоднозначностей при цьому перед дескрипторами класів записується літера L, а після них - крапка з комою. Наприклад, (ILjava/lang/Object ;) I - (int, Object): int (буквою I позначається тип int). br/>
Формат структури field_info
Структура field_info має наступний формат:
field_info {
u2 access_flags;
u2 name_index;
u2 descriptor_index;
u2 attributes_count; ...