Was ist das CLASS-Dateiformat?
Eine .class-Datei enthält kompilierten Quellcode, der in der Programmiersprache Java geschrieben wurde. .class-Dateien werden vom Java-Compiler aus .java-Quelldateien erzeugt, die eine oder mehrere Klassen definieren. Jede .class-Datei ist das Ergebnis einer erfolgreichen Kompilierung und enthält Bytecode - eine binäre Darstellung einer Klasse, die von der Java Virtual Machine (JVM) ausgeführt wird.
.class-Dateien werden während der Kompilierung von .java-Quelldateien automatisch generiert. Da Bytecode plattformunabhängig ist, läuft dieselbe .class-Datei auf jedem Betriebssystem, auf dem eine kompatible JVM installiert ist. Eine einzelne .java-Quelldatei kann eine oder mehrere Klassen enthalten, und jede Klasse erhält während der Kompilierung ihre eigene .class-Datei.
Die Kompilierung von .java-Dateien in .class-Dateien erfolgt mit dem Befehl javac, der im Java Development Kit (JDK) enthalten ist. Die meisten Java-Entwicklungsumgebungen - darunter IDEs wie IntelliJ IDEA und Eclipse - kompilieren .class-Dateien automatisch, während Programmierer Code schreiben.
Die Java Runtime Environment (JRE) unterstützt die Ausführung von .class-Dateien über den Befehl java, erlaubt jedoch keine Kompilierung, da die JRE den javac-Compiler nicht enthält.
Jede .class-Datei beginnt mit der 4-Byte-Magic-Number 0xCAFEBABE, gefolgt von Minor- und Major-Versionsfeldern, die das zur Kompilierung verwendete Java-Release identifizieren. Mehrere .class-Dateien werden häufig in einem JAR-Archiv für Verteilung und Deployment zusammengefasst.
Da die JVM in vielen Versionen verfügbar ist, muss beachtet werden, dass nicht alle .class-Dateien mit allen Runtime-Versionen kompatibel sind. Eine Datei, die für eine neuere Java-Major-Version kompiliert wurde, kann nicht von einer älteren JVM geladen werden.
Sicherheit
RISIKO: MEDIUMEine .class-Datei ist kompilierter Code: Wenn Sie sie mit einer JVM ausführen ('java MyClass'), wird sie mit den Berechtigungen Ihres Benutzers ausgeführt, sodass eine unbekannte Klasse - wie ein unbekanntes JAR oder eine EXE - Malware enthalten kann. Behandeln Sie heruntergeladenes kompiliertes Java als nicht vertrauenswürdig: Führen Sie Klassen nur aus einer Quelle aus, der Sie vertrauen. Das bloße Dekompilieren oder Disassemblieren einer .class (JD-GUI, javap) führt sie nicht aus und ist sicher. Beachten Sie, dass Bytecode die Logik eines Programms preisgibt, sodass alles, was Sie kompilieren, von anderen dekompiliert werden kann, sofern es nicht obfuskiert ist.
Formatdetails
kurz gefasstProgramme zum Öffnen von CLASS-Dateien
Technische Details
technische Spezifikation| Formattyp | Kompilierter Java-Bytecode (binär) |
| MIME-Typ | application/java-vm |
| Magic Bytes | 0xCAFEBABE (4 Bytes an Dateioffset 0) - in jeder gültigen .class-Datei vorhanden |
| Versionskodierung | Bytes 6-7 (Major-Version) identifizieren das Ziel-Java-Release; z. B. 52 = Java 8, 61 = Java 17, 65 = Java 21 |
| Ausführungsumgebung | Java Virtual Machine (JVM) über den Befehl `java` |
| Kompilierungstool | `javac`-Compiler, im Java Development Kit (JDK) enthalten |
| Plattformunabhängigkeit | Bytecode ist CPU-architektur-neutral und läuft auf jedem Betriebssystem mit einer kompatiblen JVM |
| Eine Klasse pro Datei | Jede oberste oder statisch verschachtelte Klasse wird in eine eigene separate `.class`-Datei kompiliert |
| Benennung innerer Klassen | Innere und anonyme Klassen erzeugen zusätzliche Dateien mit `$` im Namen (z. B. `Outer$Inner.class`) |
| Konstantenpool | Jede Datei enthält eine strukturierte Konstantenpool-Tabelle mit String-Literalen, Klassennamen und Feld-/Methodendeskriptoren |
| Befehlssatz | Verwendet den JVM-Bytecode-Befehlssatz (~200 Opcodes), unabhängig von einem nativen CPU-Befehlssatz |
| Bytecode-Verifizierer | Die JVM überprüft die `.class`-Dateistruktur und Typsicherheit vor der Ausführung und lehnt fehlerhafte oder manipulierte Dateien ab |
| Dekompilierung | Kann mit `javap -c` (JDK-integriert) disassembliert oder mit Tools wie JD-GUI oder CFR zurück in Java-Quellcode dekompiliert werden |
| Paketierung | Typischerweise gebündelt innerhalb von `.jar`-Archiven (ZIP-basierte Container mit mehreren `.class`-Dateien und einem Manifest) verteilt |
| Android-Inkompatibilität | Android führt `.class`-Dateien nicht direkt aus; das `d8`-Tool konvertiert sie in `.dex`-Bytecode für die Android Runtime (ART) |
| Veröffentlicht | 1995-1996 (Java 1.0) |
| Offener Standard | Ja · lizenzgebührenfrei |
| Spezifikation | docs.oracle.com |
CLASS-Konvertierungen
Community Q&A
von Nutzern gefragtNoch keine Fragen - stellen Sie die erste Frage zu CLASS-Dateien.