aspose.info
RU

Класс — формат файла класса Java

Обновлено

Что такое файл класса?

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

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

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

Структура файла класса

Структура файла класса показана ниже.

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 плюс один. Индекс пула констант считается допустимым, если он больше нуля и меньше числа констант_пула, за исключением констант типа 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[] - Каждое значение в массиве interfaces должно быть действительным индексом в таблице Constant_pool.
  • fields_count — значение элемента fields_count дает количество структур field_info в таблице полей.
  • fields[] - Каждое значение в таблице fields должно быть структурой field_info, дающей полное описание поля в этом классе или интерфейсе.
  • methods_count — значение элемента method_count дает количество структур method_info в таблице методов.
  • methods[] - Каждое значение в таблице методов должно быть структурой method_info, дающей полное описание метода в этом классе или интерфейсе. Если ни один из флагов ACC_NATIVE и ACC_ABSTRACT не установлен в элементе access_flags структуры method_info, также предоставляются инструкции виртуальной машины Java, реализующие метод.
  • attributes_count — значение элемента attribute_count дает количество атрибутов (§4.7) в таблице атрибутов этого класса.
  • attributes[] - Каждое значение таблицы атрибутов должно быть структурой attribute_info.

использованная литература

См. также