Qu'est-ce que le format de fichier CLASS ?
Un fichier .class contient du code source compilé écrit dans le langage de programmation Java. Les fichiers .class sont générés par le compilateur Java à partir de fichiers sources .java qui définissent une ou plusieurs classes. Chaque fichier .class est le résultat d'une compilation réussie et contient du bytecode - une représentation binaire d'une classe qui est exécutée par la Java Virtual Machine (JVM).
Les fichiers .class sont générés automatiquement lors de la compilation des fichiers sources .java. Comme le bytecode est indépendant de la plateforme, le même fichier .class s'exécute sur n'importe quel système d'exploitation disposant d'une JVM compatible installée. Un seul fichier source .java peut contenir une ou plusieurs classes, et chaque classe obtient son propre fichier .class pendant le processus de compilation.
La compilation des fichiers .java en fichiers .class est effectuée à l'aide de la commande javac incluse dans le Java Development Kit (JDK). La plupart des environnements de programmation Java - y compris les IDE tels qu'IntelliJ IDEA et Eclipse - compilent les fichiers .class automatiquement au fur et à mesure que les programmeurs écrivent le code.
Le Java Runtime Environment (JRE) prend en charge l'exécution des fichiers .class via la commande java, mais ne permet pas la compilation car le JRE n'inclut pas le compilateur javac.
Chaque fichier .class commence par le nombre magique de 4 octets 0xCAFEBABE, suivi des champs de version mineure et majeure qui identifient la version de Java utilisée pour le compiler. Plusieurs fichiers .class sont couramment regroupés dans une archive JAR pour la distribution et le déploiement.
Comme la JVM est disponible dans de nombreuses versions, il faut garder à l'esprit que tous les fichiers .class ne sont pas compatibles avec toutes les versions de l'environnement d'exécution. Un fichier compilé ciblant une version majeure de Java plus récente ne peut pas être chargé par une JVM plus ancienne.
Sécurité et sûreté
RISQUE : MEDIUMUn fichier .class est du code compilé : si vous l'exécutez (« java MyClass ») avec une JVM, il s'exécute avec les permissions de votre utilisateur. Ainsi, une classe inconnue - tout comme un JAR ou un EXE inconnu - peut contenir des logiciels malveillants. Traitez le Java compilé téléchargé comme non fiable : n'exécutez que des classes provenant d'une source de confiance. La simple décompilation ou le désassemblage d'un .class (JD-GUI, javap) n'exécute pas le code et est sans danger. Sachez que le bytecode révèle la logique d'un programme, donc tout ce que vous compilez peut être décompilé par d'autres, sauf s'il est obfusqué.
Détails du format
en brefProgrammes qui ouvrent les fichiers CLASS
Détails techniques
spécifications approfondies| Type de format | Bytecode Java compilé (binaire) |
| Type MIME | application/java-vm |
| Octets magiques | 0xCAFEBABE (4 octets à l'offset 0) - présent dans chaque fichier .class valide |
| Encodage de la version | Les octets 6-7 (version majeure) identifient la version Java cible ; ex: 52 = Java 8, 61 = Java 17, 65 = Java 21 |
| Environnement d'exécution | Java Virtual Machine (JVM) via la commande `java` |
| Outil de compilation | Compilateur `javac`, inclus dans le Java Development Kit (JDK) |
| Indépendance de la plateforme | Le bytecode est neutre vis-à-vis de l'architecture CPU et s'exécute sur tout OS avec une JVM compatible |
| Une classe par fichier | Chaque classe de haut niveau ou classe imbriquée statique est compilée dans son propre fichier `.class` séparé |
| Nommage des classes internes | Les classes internes et anonymes produisent des fichiers supplémentaires avec un `$` dans le nom (ex: `Outer$Inner.class`) |
| Pool de constantes | Chaque fichier intègre une table structurée de pool de constantes contenant des littéraux de chaîne, des noms de classes et des descripteurs de champs/méthodes |
| Jeu d'instructions | Utilise le jeu d'instructions bytecode de la JVM (~200 opcodes), indépendant de tout jeu d'instructions CPU natif |
| Vérificateur de bytecode | La JVM vérifie la structure du fichier `.class` et la sécurité des types avant l'exécution, rejetant les fichiers malformés ou altérés |
| Décompilation | Peut être désassemblé avec `javap -c` (intégré au JDK) ou décompilé en source Java avec des outils tels que JD-GUI ou CFR |
| Conditionnement | Généralement distribué regroupé dans des archives `.jar` (conteneurs basés sur ZIP contenant plusieurs fichiers `.class` et un manifeste) |
| Incompatibilité Android | Android n'exécute pas directement les fichiers `.class` ; l'outil `d8` les convertit en bytecode `.dex` pour l'Android Runtime (ART) |
| Publié | 1995-1996 (Java 1.0) |
| Standard ouvert | Oui · libre de droits |
| Spécification | docs.oracle.com |
Conversions CLASS
Q&R de la communauté
posées par les utilisateursPas encore de questions - soyez le premier à poser une question sur les fichiers CLASS.