Perché convertire CLASS in JAVA?
Un file .class memorizza bytecode compilato, non codice sorgente. La decompilazione è utile quando i file .java originali sono persi o non disponibili, per l'analisi di codice di terze parti o per capire cosa fa una classe compilata. Un decompiler effettua il reverse-engineering di un'approssimazione del sorgente Java originale.
Come convertire CLASS in JAVA
JD-GUI OPEN-SOURCE
Trascina il file .class nella finestra di JD-GUI e il sorgente ricostruito apparirà immediatamente. Usa File > Save All Sources per esportare i file .java.
CFR OPEN-SOURCE
Esegui java -jar cfr.jar MyClass.class --outputdir ./out e il file .java decompilato apparirà nella cartella di output.
IntelliJ IDEA Community FREE
Apri o trascina il file .class nell'editor; IntelliJ lo decompila automaticamente utilizzando il motore integrato Fernflower e visualizza il sorgente.
Informazioni su questi formati
Un file CLASS è bytecode Java compilato - l'output prodotto da javac a partire da un file sorgente .java. Per eseguirlo è necessario avere Java (un JDK) installato, quindi usare il comando…
Apri dettagli .CLASS →Un file JAVA è codice sorgente leggibile dall'uomo scritto nel linguaggio di programmazione Java. È possibile aprirlo in qualsiasi editor di testo o in un IDE Java come IntelliJ IDEA o VS…
Apri dettagli .JAVA →Qualità e a cosa prestare attenzione
- I commenti nel sorgente originale vengono rimossi dal compilatore e non possono essere recuperati dal bytecode.
- I nomi originali delle variabili locali sono solitamente sostituiti con nomi generati come
var1,var2a meno che la classe non sia stata compilata con informazioni di debug (javac -g). - Le classi offuscate (elaborate con ProGuard o R8) vengono decompilate in codice a malapena leggibile - il decompiler funziona, ma l'output riflette i nomi offuscati.
Domande frequenti
Il sorgente Java decompilato è ricompilabile?
Come faccio a sapere quale versione di Java ha compilato la classe?
.class indica la release di Java - ad esempio, 52 = Java 8, 61 = Java 17, 65 = Java 21.E se avessi bisogno solo di ispezionare il bytecode, non di recuperare il sorgente Java?
javap -c -p MyClass (incluso nel JDK) disassembla il bytecode in mnemonici senza necessità di download separati.