Что такое формат файла CLASS?
Файл .class содержит скомпилированный исходный код, написанный на языке программирования Java. Файлы .class генерируются компилятором Java из исходных файлов .java, которые определяют один или несколько классов. Каждый файл .class является результатом успешной компиляции и содержит байт-код - бинарное представление класса, которое исполняется виртуальной машиной Java (JVM).
Файлы .class создаются автоматически во время компиляции исходных файлов .java. Поскольку байт-код платформонезависим, один и тот же файл .class работает в любой операционной системе, где установлена совместимая JVM. Один исходный файл .java может содержать один или несколько классов, и каждый класс получает свой собственный файл .class в процессе компиляции.
Компиляция файлов .java в файлы .class выполняется с помощью команды javac, входящей в состав Java Development Kit (JDK). Большинство сред программирования Java, включая такие IDE, как IntelliJ IDEA и Eclipse, компилируют файлы .class автоматически по мере написания кода программистом.
Java Runtime Environment (JRE) поддерживает выполнение файлов .class с помощью команды java, но не позволяет выполнять компиляцию, так как JRE не включает компилятор javac.
Каждый файл .class начинается с 4-байтового магического числа 0xCAFEBABE, за которым следуют поля дополнительной и основной версий, идентифицирующие выпуск Java, использованный для компиляции. Несколько файлов .class обычно упаковываются вместе в архив JAR для распространения и развертывания.
Поскольку JVM доступна во многих версиях, следует помнить, что не все файлы .class совместимы со всеми версиями среды выполнения. Файл, скомпилированный для более новой основной версии Java, не может быть загружен старой JVM.
Безопасность и защита
РИСК: MEDIUMФайл .class - это скомпилированный код: если вы запустите его («java MyClass») в JVM, он будет выполнен с правами вашего пользователя, поэтому неизвестный класс - как и неизвестный JAR или EXE - может содержать вредоносное ПО. Относитесь к загруженной скомпилированной Java как к ненадежной: запускайте классы только из доверенных источников. Простая декомпиляция или дизассемблирование .class (JD-GUI, javap) не запускает его и является безопасным. Имейте в виду, что байт-код раскрывает логику программы, поэтому все, что вы компилируете, может быть декомпилировано другими, если не использована обфускация.
Детали формата
в двух словахПрограммы, открывающие файлы CLASS
Технические подробности
глубокая спецификация| Тип формата | Скомпилированный байт-код Java (бинарный) |
| MIME-тип | application/java-vm |
| Магические байты | 0xCAFEBABE (4 байта со смещением 0) - присутствуют в каждом валидном файле .class |
| Кодирование версии | Байты 6-7 (основная версия) идентифицируют целевой выпуск Java; например, 52 = Java 8, 61 = Java 17, 65 = Java 21 |
| Среда выполнения | Виртуальная машина Java (JVM) через команду `java` |
| Инструмент компиляции | Компилятор `javac`, включенный в Java Development Kit (JDK) |
| Платформонезависимость | Байт-код нейтрален к архитектуре процессора и работает на любой ОС с совместимой JVM |
| Один класс на файл | Каждый класс верхнего уровня или статический вложенный класс компилируется в свой отдельный файл `.class` |
| Именование внутренних классов | Внутренние и анонимные классы создают дополнительные файлы с символом `$` в имени (например, `Outer$Inner.class`) |
| Пул констант | Каждый файл содержит структурированную таблицу пула констант, в которой хранятся строковые литералы, имена классов и дескрипторы полей/методов |
| Набор инструкций | Использует набор инструкций байт-кода JVM (около 200 опкодов), независимый от набора инструкций любого нативного процессора |
| Верификатор байт-кода | JVM проверяет структуру файла `.class` и безопасность типов перед выполнением, отклоняя поврежденные или подделанные файлы |
| Декомпиляция | Может быть дизассемблирован с помощью `javap -c` (встроено в JDK) или декомпилирован обратно в исходный код Java с помощью таких инструментов, как JD-GUI или CFR |
| Упаковка | Обычно распространяется в составе архивов `.jar` (контейнеры на базе ZIP, содержащие множество файлов `.class` и манифест) |
| Несовместимость с Android | Android не исполняет файлы `.class` напрямую; инструмент `d8` преобразует их в байт-код `.dex` для Android Runtime (ART) |
| Выпущен | 1995-1996 (Java 1.0) |
| Открыть стандартное | Да · без роялти |
| Спецификация | docs.oracle.com |
Конвертации CLASS
Вопросы и ответы сообщества
спрошено пользователямиВопросов пока нет - станьте первым, кто спросит о файлах CLASS.