Программа просмотра Java-классов (Java Class Viewer) - Формат классового файла
ОГЛАВЛЕНИЕ
Формат классового файла
Файл класса (ClassFile) имеет следующую структуру :
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];
}
Вот краткое описание структуры ClassFile из раздела формата файла класса (The class File Format) в спецификации JVM:
magic - 0xCAFEBABE, магический номер файла класса. Если первые 4 байта не являются 0xCAFEBABE, то файл не будет распознан как файл класса.
minor_version, major_version - major version и minor version вместе определяют версию класса.
constant_pool_count, cp_info constant_pool[constant_pool_count-1] - набор констант (Constant pool) файла класса. Он может содержать 11 типов констант:
01. class/interface info
02. field reference info
03. method reference info
04. interface method reference info
05. String
06. Integer
07. Float
08. Long
09. Double
10. NameAndType
11. Utf8
access_flags - флаг доступа к классу
this_class, super_class - информация о текущем классе и суперклассе. Только java.lang.Object суперкласс класса равен null; если суперкласс не указан для этого класса, то суперклассом будет java.lang.Object.
interfaces_count, interfaces[interfaces_count] - прямые супер интерфейсы.
fields_count, field_info fields[fields_count] - поля данного класса, если таковые существуют.
methods_count, method_info methods[methods_count] - методы данного класса. Java-компилятор сгенерирует конструктор по умолчанию для класса (исключая внутренний класс inner class) если такового нет. Потому будет хотя бы один метод в данном классе.
attributes_count, attribute_info attributes[attributes_count] - атрибуты данного класса. Существует хотя бы один атрибут с названием "SourceFile" для названия файла исходного кода.