Vad är filformatet CLASS?
En .class-fil innehåller kompilerad källkod skriven i programmeringsspråket Java. .class-filer genereras av Java-kompilatorn från .java-källfiler som definierar en eller flera klasser. Varje .class-fil är resultatet av en lyckad kompilering och innehåller bytecode - en binär representation av en klass som körs av Java Virtual Machine (JVM).
.class-filer genereras automatiskt under kompileringen av .java-källfiler. Eftersom bytecode är plattformsoberoende körs samma .class-fil på alla operativsystem som har en kompatibel JVM installerad. En enskild .java-källfil kan innehålla en eller flera klasser, och varje klass får sin egen .class-fil under kompileringsprocessen.
Kompilering av .java-filer till .class-filer utförs med kommandot javac som ingår i Java Development Kit (JDK). De flesta Java-programmeringsmiljöer - inklusive IDE:er som IntelliJ IDEA och Eclipse - kompilerar .class-filer automatiskt när programmerare skriver kod.
Java Runtime Environment (JRE) stöder körning av .class-filer via kommandot java, men tillåter inte kompilering eftersom JRE inte inkluderar javac-kompilatorn.
Varje .class-fil börjar med det 4 byte långa magiska numret 0xCAFEBABE, följt av fält för minor- och major-versioner som identifierar den Java-utgåva som användes för att kompilera den. Flera .class-filer paketeras vanligtvis tillsammans i ett JAR-arkiv för distribution och driftsättning.
Eftersom JVM finns i många versioner måste man komma ihåg att inte alla .class-filer är kompatibla med alla versioner av körtidsmiljön. En fil som kompilerats för en nyare Java-huvudversion kan inte laddas av en äldre JVM.
Säkerhet & trygghet
RISK: MEDIUMEn .class-fil är kompilerad kod: om du kör den («java MyClass») med en JVM, körs den med din användares behörigheter, så en okänd klass - precis som en okänd JAR eller EXE - kan innehålla skadlig kod. Hantera nedladdad kompilerad Java som otillförlitlig: kör endast klasser från källor du litar på. Att bara dekompilera eller disassemblera en .class-fil (JD-GUI, javap) exekverar den inte och är säkert. Var medveten om att bytecode avslöjar ett programs logik, så allt du kompilerar kan dekompileras av andra om det inte är obfuskerat.
Formatdetaljer
i ett nötskalProgram som öppnar CLASS-filer
Tekniska detaljer
djup specifikation| Formattyp | Kompilerad Java-bytecode (binär) |
| MIME-typ | application/java-vm |
| Magic bytes | 0xCAFEBABE (4 byte vid filoffset 0) - finns i varje giltig .class-fil |
| Versionskodning | Byte 6-7 (major version) identifierar målversionen av Java; t.ex. 52 = Java 8, 61 = Java 17, 65 = Java 21 |
| Exekveringsmiljö | Java Virtual Machine (JVM) via kommandot `java` |
| Kompileringsverktyg | `javac`-kompilatorn, ingår i Java Development Kit (JDK) |
| Plattformsoberoende | Bytecode är oberoende av CPU-arkitektur och körs på alla OS med en kompatibel JVM |
| En klass per fil | Varje toppnivåklass eller statisk nästlad klass kompileras till sin egen separata `.class`-fil |
| Namngivning av inre klasser | Inre och anonyma klasser skapar ytterligare filer med `$` i namnet (t.ex. `Outer$Inner.class`) |
| Constant pool | Varje fil bäddar in en strukturerad konstantpoolstabell som innehåller strängliteraler, klassnamn och fält-/metodbeskrivningar |
| Instruktionsuppsättning | Använder JVM:s instruktionsuppsättning för bytecode (~200 opkoder), oberoende av någon infödd CPU-instruktionsuppsättning |
| Bytecode-verifierare | JVM verifierar `.class`-filens struktur och typsäkerhet före exekvering och avvisar felaktiga eller manipulerade filer |
| Dekompilering | Kan disassembleras med `javap -c` (inbyggt i JDK) eller dekompileras tillbaka till Java-källkod med verktyg som JD-GUI eller CFR |
| Paketering | Distribueras vanligtvis paketerade inuti `.jar`-arkiv (ZIP-baserade behållare som innehåller flera `.class`-filer och ett manifest) |
| Android-inkompatibilitet | Android exekverar inte `.class`-filer direkt; verktyget `d8` konverterar dem till `.dex`-bytecode för Android Runtime (ART) |
| Släppt | 1995-1996 (Java 1.0) |
| Öppen standard | Ja · royaltyfri |
| Specifikation | docs.oracle.com |
CLASS-konverteringar
Frågor & svar
frågat av användareInga frågor än - bli den första att fråga om CLASS-filer.