Che cos'è il formato di file CLASS?
Un file .class contiene codice sorgente compilato scritto nel linguaggio di programmazione Java. I file .class sono generati dal compilatore Java a partire da file sorgente .java che definiscono una o più classi. Ogni file .class è il risultato di una compilazione riuscita e contiene bytecode - una rappresentazione binaria di una classe che viene eseguita dalla Java Virtual Machine (JVM).
I file .class vengono generati automaticamente durante la compilazione dei file sorgente .java. Poiché il bytecode è indipendente dalla piattaforma, lo stesso file .class può essere eseguito su qualsiasi sistema operativo che abbia una JVM compatibile installata. Un singolo file sorgente .java può contenere una o più classi, e ogni classe riceve il proprio file .class durante il processo di compilazione.
La compilazione dei file .java in file .class viene eseguita utilizzando il comando javac incluso nel Java Development Kit (JDK). La maggior parte degli ambienti di programmazione Java - inclusi gli IDE come IntelliJ IDEA ed Eclipse - compila i file .class automaticamente mentre i programmatori scrivono il codice.
Il Java Runtime Environment (JRE) supporta l'esecuzione dei file .class tramite il comando java, ma non ne consente la compilazione poiché il JRE non include il compilatore javac.
Ogni file .class inizia con il magic number di 4 byte 0xCAFEBABE, seguito dai campi della versione minor e major che identificano la release di Java utilizzata per compilarlo. Più file .class vengono comunemente raggruppati in un archivio JAR per la distribuzione e l'implementazione.
Poiché la JVM è disponibile in molte versioni, bisogna tenere presente che non tutti i file .class sono compatibili con tutte le versioni del runtime. Un file compilato puntando a una versione major di Java più recente non può essere caricato da una JVM più vecchia.
Sicurezza e incolumità
RISCHIO: MEDIUMUn file .class è codice compilato: se lo esegui («java MyClass») con una JVM, viene eseguito con i permessi del tuo utente, quindi una classe sconosciuta - come un JAR o un EXE sconosciuto - può contenere malware. Tratta il codice Java compilato scaricato come non attendibile: esegui solo classi provenienti da fonti sicure. La semplice decompilazione o il disassemblaggio di un file .class (JD-GUI, javap) non lo esegue ed è un'operazione sicura. Tieni presente che il bytecode rivela la logica di un programma, quindi tutto ciò che compili può essere decompilato da altri a meno che non sia offuscato.
Dettagli del formato
in sintesiProgrammi che aprono file CLASS
Dettagli tecnici
specifiche approfondite| Tipo di formato | Bytecode Java compilato (binario) |
| Tipo MIME | application/java-vm |
| Magic bytes | 0xCAFEBABE (4 byte all'offset 0) - presente in ogni file .class valido |
| Codifica versione | I byte 6-7 (versione major) identificano la release di Java di destinazione; es. 52 = Java 8, 61 = Java 17, 65 = Java 21 |
| Ambiente di esecuzione | Java Virtual Machine (JVM) tramite il comando `java` |
| Strumento di compilazione | Compilatore `javac`, incluso nel Java Development Kit (JDK) |
| Indipendenza dalla piattaforma | Il bytecode è neutrale rispetto all'architettura della CPU e gira su qualsiasi OS con una JVM compatibile |
| Una classe per file | Ogni classe di primo livello o classe statica nidificata viene compilata nel proprio file `.class` separato |
| Nomenclatura classi interne | Le classi interne e anonime producono file aggiuntivi con il simbolo `$` nel nome (es. `Outer$Inner.class`) |
| Constant pool | Ogni file incorpora una tabella strutturata chiamata constant pool che contiene stringhe letterali, nomi di classi e descrittori di campi/metodi |
| Set di istruzioni | Utilizza il set di istruzioni bytecode della JVM (~200 opcode), indipendente da qualsiasi set di istruzioni CPU nativo |
| Verificatore bytecode | La JVM verifica la struttura del file `.class` e la sicurezza dei tipi prima dell'esecuzione, rifiutando file malformati o manomessi |
| Decompilazione | Può essere disassemblato con `javap -c` (integrato nel JDK) o decompilato in sorgente Java con strumenti come JD-GUI o CFR |
| Packaging | Tipicamente distribuito raggruppato all'interno di archivi `.jar` (contenitori basati su ZIP che ospitano più file `.class` e un manifesto) |
| Incompatibilità Android | Android non esegue direttamente i file `.class`; lo strumento `d8` li converte in bytecode `.dex` per l'Android Runtime (ART) |
| Rilasciato | 1995-1996 (Java 1.0) |
| Standard aperto | Sì · royalty-free |
| Specifica | docs.oracle.com |
Conversioni CLASS
Domande e risposte della community
chiesto dagli utentiAncora nessuna domanda - sii il primo a chiedere informazioni sui file CLASS.