Программа просмотра 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" для названия файла исходного кода.