aspose.info
BG

Клас – Файлов формат на Java клас

Обновено

Какво е Class файл?

Файл с клас в Java е компилиран изход на .java клас, който всъщност се изпълнява от виртуална машина на Java (JVM). Файловете с класове могат да се изпълняват поотделно, както и могат да бъдат част от JAR файл като пакет заедно с други пакетни файлове. Те могат да бъдат създадени с помощта на командата javac от интерфейса на командния ред. Някои Java IDE като Eclipse и NetBeans предоставят създаване на .class изходни файлове от Java на проекта файлове.

Файлов формат на класа

Файлът с клас Java се състои от байт код, който е междинен код, който трябва да се изпълнява от JVM. Файлът на класа се състои от поток от 8-битови байтове и многобайтови елементи от данни винаги се съхраняват в ред на биг-ендиан.

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];
}

където:

  • u1 = еднобайтово количество без знак
  • u2 = двубайтово количество без знак
  • u4 = четирибайтово количество без знак

Подробности за файловата структура .class също са обяснени в Oracle файлов формат на клас и могат да бъдат препоръчани от разработчици за справка. Обобщение на тези полета е както следва.

  • magic - Магическият елемент предоставя магическото число, идентифициращо файловия формат на класа; има стойност 0xCAFEBABE.
  • minor_version, major_version - Стойностите на елементите minor_version и major_version са номерата на второстепенната и основната версия на този клас файл.
  • constant_pool_count - Стойността на елемента constant_pool_count е равна на броя на записите в таблицата constant_pool плюс едно. Индекс на constant_pool се счита за валиден, ако е по-голям от нула и по-малък от constant_pool_count, с изключение на константи от тип long и double.
  • constant_pool[] - Constant_pool е таблица със структури (§4.4), представляващи различни низови константи, имена на класове и интерфейси, имена на полета и други константи, които са посочени в структурата на ClassFile и нейните подструктури. Форматът на всеки запис в таблицата на constant_pool се обозначава с неговия първи байт “tag”.
  • access_flags - Стойността на елемента access_flags е маска от флагове, използвани за обозначаване на разрешения за достъп и свойства на този клас или интерфейс.
  • this_class - Стойността на елемента this_class трябва да бъде валиден индекс в таблицата constant_pool.
  • super_class - За клас стойността на елемента super_class или трябва да е нула, или трябва да бъде валиден индекс в таблицата на constant_pool.
  • interfaces_count - Стойността на елемента interfaces_count дава броя на директните супер интерфейси от този клас или тип интерфейс.
  • interfaces[] - Всяка стойност в масива интерфейси трябва да бъде валиден индекс в таблицата constant_pool.
  • fields_count - Стойността на елемента fields_count дава броя на структурите field_info в таблицата с полета.
  • fields[] - Всяка стойност в таблицата с полета трябва да бъде структура field_info, даваща пълно описание на поле в този клас или интерфейс.
  • methods_count - Стойността на елемента methods_count дава броя на структурите method_info в таблицата с методи.
  • methods[] - Всяка стойност в таблицата с методи трябва да бъде структура method_info, даваща пълно описание на метод в този клас или интерфейс. Ако нито един от флаговете ACC_NATIVE и ACC_ABSTRACT не е зададен в елемента access_flags на структура method_info, инструкциите за Java Virtual Machine, прилагащи метода, също се предоставят.
  • attributes_count - Стойността на елемента attributes_count дава броя на атрибутите (§4.7) в таблицата с атрибути на този клас.
  • attributes[] - Всяка стойност на таблицата с атрибути трябва да бъде структура attribute_info.

Препратки

Вижте също