Warum CLASS in JAVA konvertieren?
Eine .class-Datei speichert kompilierten Bytecode, keinen Quellcode. Das Decompilieren ist nützlich, wenn die ursprünglichen .java-Dateien verloren gegangen oder nicht verfügbar sind, zur Überprüfung von Drittanbieter-Code oder um zu verstehen, was eine kompilierte Klasse tut. Ein Decompiler rekonstruiert eine Annäherung des ursprünglichen Java-Quellcodes.
Wie man CLASS in JAVA konvertiert
JD-GUI OPEN-SOURCE
Ziehen Sie die .class-Datei in das JD-GUI-Fenster und der rekonstruierte Quellcode erscheint sofort. Nutzen Sie Datei > Alle Quellen speichern, um .java-Dateien zu exportieren.
CFR OPEN-SOURCE
Führen Sie java -jar cfr.jar MyClass.class --outputdir ./out aus und die decompilierte .java-Datei erscheint im Ausgabeordner.
IntelliJ IDEA Community FREE
Öffnen oder ziehen Sie die .class-Datei in den Editor; IntelliJ decompiliert sie automatisch mit der integrierten Fernflower-Engine und zeigt den Quellcode an.
Über diese Formate
Eine CLASS-Datei ist kompilierter Java-Bytecode - die Ausgabe, die javac aus einer .java-Quelldatei erzeugt. Um sie auszuführen, benötigen Sie installiertes Java (ein JDK) und verwenden…
.CLASS-Details öffnen →Eine JAVA-Datei ist menschenlesbarer Quellcode, der in der Programmiersprache Java geschrieben wurde. Öffnen Sie sie in einem beliebigen Texteditor oder einer Java-IDE wie IntelliJ IDEA…
.JAVA-Details öffnen →Qualität & worauf zu achten ist
- Kommentare im ursprünglichen Quellcode werden vom Compiler entfernt und können nicht aus dem Bytecode wiederhergestellt werden.
- Ursprüngliche lokale Variablennamen werden meist durch generierte Namen wie
var1,var2ersetzt, es sei denn, die Klasse wurde mit Debug-Informationen (javac -g) kompiliert. - Obfuskierte Klassen (verarbeitet mit ProGuard oder R8) werden in kaum lesbaren Code decompiliert - der Decompiler funktioniert zwar, aber die Ausgabe spiegelt die verschleierten Namen wider.
Häufig gestellte Fragen
Ist decompilierter Java-Quellcode erneut kompilierbar?
Woher weiß ich, mit welcher Java-Version die Klasse kompiliert wurde?
.class-Datei gibt das Java-Release an - zum Beispiel 52 = Java 8, 61 = Java 17, 65 = Java 21.Was ist, wenn ich nur den Bytecode inspizieren möchte, ohne den Java-Quellcode wiederherzustellen?
javap -c -p MyClass (im JDK enthalten) disassembliert den Bytecode in Mnemonics ohne einen separaten Download.