Hvad er CLASS-filformatet?
En .class-fil indeholder kompileret kildekode skrevet i programmeringssproget Java. .class-filer genereres af Java-compileren fra .java-kildefiler, der definerer en eller flere klasser. Hver .class-fil er resultatet af en vellykket kompilering og indeholder bytecode - en binær repræsentation af en klasse, der eksekveres af Java Virtual Machine (JVM).
.class-filer genereres automatisk under kompileringen af .java-kildefiler. Da bytecode er platformsuafhængig, kører den samme .class-fil på ethvert operativsystem, der har en kompatibel JVM installeret. En enkelt .java-kildefil kan indeholde en eller flere klasser, og hver klasse får sin egen .class-fil under kompileringsprocessen.
Kompilering af .java-filer til .class-filer udføres ved hjælp af javac-kommandoen, der er inkluderet i Java Development Kit (JDK). De fleste Java-programmeringsmiljøer - herunder IDE'er som IntelliJ IDEA og Eclipse - kompilerer automatisk .class-filer, mens programmører skriver kode.
Java Runtime Environment (JRE) understøtter eksekvering af .class-filer via java-kommandoen, men tillader ikke kompilering, da JRE ikke inkluderer javac-compileren.
Hver .class-fil begynder med det 4-byte magiske nummer 0xCAFEBABE, efterfulgt af minor- og major-versionsfelter, der identificerer den Java-udgivelse, der blev brugt til at kompilere den. Flere .class-filer pakkes ofte sammen i et JAR-arkiv til distribution og implementering.
Da JVM findes i mange versioner, skal man være opmærksom på, at ikke alle .class-filer er kompatible med alle versioner af runtime-miljøet. En fil, der er kompileret til en nyere Java-hovedversion, kan ikke indlæses af en ældre JVM.
Sikkerhed og tryghed
RISIKO: MEDIUMEn .class-fil er kompileret kode: hvis du kører den («java MyClass») med en JVM, eksekveres den med din brugers tilladelser, så en ukendt klasse - ligesom en ukendt JAR eller EXE - kan indeholde malware. Behandl downloadet kompileret Java som upålideligt: kør kun klasser fra en kilde, du stoler på. Blot at dekompilere eller disassemblere en .class-fil (JD-GUI, javap) eksekverer den ikke og er sikkert. Vær opmærksom på, at bytecode afslører et programs logik, så alt hvad du kompilerer, kan dekompileres af andre, medmindre det er obfuskeret.
Formatdetaljer
kort fortaltProgrammer der åbner CLASS-filer
Tekniske detaljer
dyb specifikation| Format-type | Kompileret Java-bytecode (binær) |
| MIME-type | application/java-vm |
| Magic bytes | 0xCAFEBABE (4 bytes ved fil-offset 0) - findes i enhver gyldig .class-fil |
| Versionskodning | Bytes 6-7 (major version) identificerer mål-Java-udgivelsen; f.eks. 52 = Java 8, 61 = Java 17, 65 = Java 21 |
| Eksekveringsmiljø | Java Virtual Machine (JVM) via `java`-kommandoen |
| Kompileringsværktøj | `javac`-compiler, inkluderet i Java Development Kit (JDK) |
| Platformsuafhængighed | Bytecode er CPU-arkitektur-neutral og kører på ethvert OS med en kompatibel JVM |
| Én klasse pr. fil | Hver top-level eller statisk indlejret klasse kompileres til sin egen separate `.class`-fil |
| Navngivning af indre klasser | Indre og anonyme klasser producerer yderligere filer med `$` i navnet (f.eks. `Outer$Inner.class`) |
| Constant pool | Hver fil indlejrer en struktureret constant pool-tabel, der indeholder streng-literaler, klassenavne og felt/metode-beskrivelser |
| Instruktionssæt | Bruger JVM-bytecode-instruktionssættet (~200 opkoder), uafhængigt af ethvert indfødt CPU-instruktionssæt |
| Bytecode-verifikator | JVM verificerer `.class`-filens struktur og typesikkerhed før eksekvering og afviser fejlbehæftede eller manipulerede filer |
| Dekompilering | Kan disassembleres med `javap -c` (indbygget i JDK) eller dekompileres tilbage til Java-kildekode med værktøjer som JD-GUI eller CFR |
| Emballering | Distribueres typisk bundtet i `.jar`-arkiver (ZIP-baserede containere, der indeholder flere `.class`-filer og et manifest) |
| Android-inkompatibilitet | Android eksekverer ikke `.class`-filer direkte; `d8`-værktøjet konverterer dem til `.dex`-bytecode til Android Runtime (ART) |
| Udgivet | 1995-1996 (Java 1.0) |
| Åben standard | Ja · royaltyfri |
| Specifikation | docs.oracle.com |
CLASS-konverteringer
Fællesskabets Q&A
spurgt af brugereIngen spørgsmål endnu - vær den første til at spørge om CLASS-filer.