Зачем конвертировать CLASS в JAVA?
Файл .class хранит скомпилированный байт-код, а не исходный код. Декомпиляция полезна, когда оригинальные файлы .java утеряны или недоступны, для аудита стороннего кода или для понимания того, что делает скомпилированный класс. Декомпилятор выполняет обратную разработку, создавая аппроксимацию оригинального исходного кода Java.
Способы конвертации CLASS в JAVA
JD-GUI OPEN-SOURCE
Перетащите файл .class в окно JD-GUI, и восстановленный исходный код появится мгновенно. Используйте File > Save All Sources для экспорта файлов .java.
CFR OPEN-SOURCE
Запустите java -jar cfr.jar MyClass.class --outputdir ./out, и декомпилированный файл .java появится в выходной папке.
IntelliJ IDEA Community FREE
Откройте или перетащите файл .class в редактор; IntelliJ автоматически декомпилирует его с помощью встроенного движка Fernflower и отобразит исходный код.
Об этих форматах
Файл CLASS представляет собой скомпилированный байт-код Java - результат работы javac из исходного файла .java. Чтобы запустить его, вам необходимо установить Java (JDK), а затем…
Открыть детали .CLASS →A JAVA file is human-readable source code written in the Java programming language. Open it in any text editor or a Java IDE such as IntelliJ IDEA or VS Code. To run it, install a JDK, then…
Открыть детали .JAVA →Качество и на что обратить внимание
- Комментарии в оригинальном исходном коде удаляются компилятором и не могут быть восстановлены из байт-кода.
- Оригинальные имена локальных переменных обычно заменяются сгенерированными именами, такими как
var1,var2, если класс не был скомпилирован с отладочной информацией (javac -g). - Обфусцированные классы (обработанные с помощью ProGuard или R8) декомпилируются в трудночитаемый код - декомпилятор сработает, но результат будет отражать обфусцированные имена.
Часто задаваемые вопросы
Можно ли повторно скомпилировать декомпилированный исходный код Java?
Как узнать, какая версия Java скомпилировала класс?
.class указывает на релиз Java - например, 52 = Java 8, 61 = Java 17, 65 = Java 21.Что если мне нужно только просмотреть байт-код, а не восстанавливать исходный код Java?
javap -c -p MyClass (входит в состав JDK) дизассемблирует байт-код в мнемоники без необходимости скачивания сторонних утилит.