class (format de fichier)

class (format de fichier)
Classe Java
Java icon.png

Extension .class
Type MIME application/java-vm
Développé par Sun Microsystems
Type de format Exécutable
Standard(s) Spécification Java[1]
Spécification Format ouvert

Dans le langage de programmation Java le code source qui se trouve dans un fichier texte passe par une opération de compilation qui produit un fichier exécutable (voire plusieurs) dont l'extension est .class. Un tel fichier est plus tard chargé en mémoire par le chargeur de classes de n'importe quelle machine virtuelle Java (JVM) afin d'obtenir la définition de la classe lors de l'exécution.

Comme l'un des objectifs de Java est d'être indépendant de la plate-forme, les instructions du code source sont converties en un code spécifique appelé bytecode (et non pas en langage machine de l'ordinateur qui effectue la compilation) qui est stocké dans un fichier de classe portant toujours l'extension .class. Pour garantir l'indépendance de Java par rapport à la plate-forme d'exécution, le format de fichier .class est figé de façon à ce que le résultat de la compilation sur une machine puisse s'exécuter sur n'importe quelle autre.

Sommaire

Structure du fichier

La convention d'une JVM est de toujours fonctionner en big-endian. Dans les descriptions qui suivent quand un nombre est codé sur 2 octets par exemple l'octet de poids fort sera lu en premier.

Le fichier contient un certain nombre de tables, celles-ci partagent toutes la même structure : un compteur sur 2 octets suivi par un nombre fixe ou variable d'octets pour chaque élément de la table.

Sections

Le fichier est découpé en dix sections (dont la plupart sont de taille variable). Voici leur description dans l'ordre où elles se rencontrent dans un fichier de classe.

nom fonction taille description
magic number permet à la JVM de reconnaître un fichier .class octets suite des valeurs 0xCA 0xFE 0xBA 0xBE (CAFEBABE)
version permet à la JVM de vérifier qu'elle est compatible avec ce fichier .class 2 fois 2 octets numéro de version du fichier mineur (toujours 0) puis majeur
constantes voir la section suivante variable table, chaque constante occupe une taille variable
masque d'accès code divers drapeaux concernant la classe (private, public, abstract,  …) octets masque de bits
nom de la classe le nom de cette classe en format interne octets pointeur dans la table des constantes vers l'identifiant interne de cette classe
classe parent le nom de la classe parent de cette classe octets pointeur dans la table des constantes vers l'identifiant interne de la classe parent
interfaces implémentés liste les interface parents de cette classe variable table, 2 octets par pointeur dans la table des constantes vers l'identifiant interne d'une classe
variables décrit chaque variable de cette classe variable table, voir la section de description des membres de classe
méthodes décrit chaque méthode de cette classe variable table, voir la section de description des membres de classe
attributs fournit des attributs de la classe (nom du fichier source,  …) variable table, chaque attribut occupe une taille variable

Notes :

  • les versions de fichiers de classe sont les suivants : J2SE 6.0=50, J2SE 5.0=49, JDK 1.4=48, JDK 1.3=47, JDK 1.2=46, JDK 1.1=45 ;
  • le format interne d'un nom de classe utilise le caractère '/' comme séparateur en remplacement du caractère '.' utilisé dans le code source Java ;
  • si une classe n'a pas de classe parent alors la valeur correspondant à java.lang.Object y est placée ; seule la classe java.lang.Object elle-même n'a pas de classe parent (la valeur est 0 qui n'est pas le numéro d'une constante) ;
  • une classe Java ne peut hériter que d'une seule classe parent mais sans limite d'interfaces d'où l'organisation de ces deux sections.

Constantes

La table des constantes stocke la plupart des valeurs constantes dans la classe (nombres ou textes) ainsi que d'éléments plus évolués (types de données, noms de classes, noms d'attributs,  …) Chaque constante est décrite par un premier octet codant son type suivi d'un nombre fixe ou variable d'octets selon le type de donnée.

Le compteur de la table des constantes n'est jamais identique au nombre de constantes car pour des raisons historiques leur numérotation commence à 1 (non pas à 0) et de plus deux types de constantes consomment deux numéros au lieu d'un seul.

Les types de constantes suivants sont définis :

type fonction taille (en plus de l'octet codant le type) description
CONSTANT_Integer (3)
CONSTANT_Float (4)
nombre codé sur 32 bits employé dans le code Java octets nombre entier relatif sur 32 bits ou nombre flottant simple précision IEEE 754
CONSTANT_Long (5)
CONSTANT_Double (6)
nombre codé sur 64 bits employé dans le code Java octets nombre entier relatif sur 64 bits ou nombre flottant double précision IEEE 754
CONSTANT_Utf8 (1) texte variable octets de compteur suivis par ce nombre d'octets représentant un texte Unicode codé en UTF-8 modifié
CONSTANT_String (8) chaîne de caractères employée dans le code Java octets pointeur dans la table des constantes vers une CONSTANT_Utf8 représentant un java.lang.String employé dans le code Java
CONSTANT_Class (7) nom d'une classe ou d'une interface en format interne octets pointeur dans la table des constantes vers une CONSTANT_Utf8 représentant le nom d'une classe
CONSTANT_NameAndType (12) identifiant et type d'un membre de classe 2 fois 2 octets deux pointeurs dans la table des constantes vers des CONSTANT_Utf8 représentant d'une part un identifiant dans le code Java et d'autre part un type de données ou une signature de méthode en format interne
CONSTANT_Fieldref (9)
CONSTANT_Methodref (10)
CONSTANT_InterfaceMethodref (11)
référence vers un membre de classe 2 fois 2 octets deux pointeurs dans la table des constantes vers une CONSTANT_Class décrivant la classe (ou l'interface) de base du membre et l'autre vers un CONSTANT_NameAndType décrivant le nom et le type du membre

Notes :

  • le format UTF-8 modifié est inspiré de l'UTF-8 mais utilise la suite 0xC0 0x80 pour représenter le caractère U+0000 et code les caractères U+10000 et suivants sous forme de deux caractères UFT-16 ensuite convertis en UTF-8 ;
  • les constantes CONSTANT_Long et CONSTANT_Double occupent deux positions dans la table des constantes ;
  • le format interne des types de données utilise :
    • une lettre clef pour les types simples (I=int, Z=boolean,  …) ;
    • 'L<classe>;' pour les types complexes ;
    • le préfixe '[' devant un type pour introduire une dimension de tableau ;
    • le caractère '(' pour introduire la signature d'une méthode.

Variables et méthodes

Les membres d'une classe sont décrits par deux tables. Chaque description de membre contient les informations suivantes.

nom fonction taille description
masque d'accès code divers drapeaux concernant la variable ou la méthode (private, public, final,  …) octets masque de bits
identifiant le nom de la variable ou de la méthode octets pointeur dans la table des constantes vers une CONSTANT_Utf8 représentant l'identifiant dans le code Java
type le type de données stockées dans la variable ou la signature de la méthode octets pointeur dans la table des constantes vers une CONSTANT_Utf8 représentant un type de données en format interne
attributs fournit les attributs du membre variable table, chaque attribut occupe une taille variable

Attributs

La table d'attributs commence par le nombre d'attributs contenus, dans celle-ci, sur 2 octets.

Chaque attribut est défini par 2 octets qui pointent vers une CONSTANT_Utf8 fournissant le nom de l'attribut suivi par 4 octets fournissant le nombre d'octets de données de cet attribut (de cette façon si un attribut n'est pas reconnu par une JVM particulière, elle peut facilement l'ignorer).

Selon le contexte d'emploi (attributs de classe de variable ou de méthode) ils peuvent fournir le nom du fichier source, le numéro de ligne source d'une déclaration,  …

Un attribut essentiel pour une variable final static (une constante) est ConstantValue qui fournit sa valeur.

Un attribut essentiel pour une méthode non abstraite est Code qui contient le bytecode du code Java compilé.

Notes et références

  1. La spécification officielle de la machine Java2 contient la description du format de fichier, elle est consultable en ligne dans sa version de 1999 ; la dernière version de cette spécification est le JSR 202.

Liens externes



Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article class (format de fichier) de Wikipédia en français (auteurs)

Игры ⚽ Нужно решить контрольную?

Regardez d'autres dictionnaires:

  • Class (format de fichier) — Classe Java Extension de fichier .class Type MIME application/java vm Développé par Sun Microsystems Type de format …   Wikipédia en Français

  • S5 (format de fichier) — Simple Standards Based Slide Show System Pour les articles homonymes, voir S5. S5 signifie Simple Standards Based Slide Show System est un format de fichier basé sur le XHTML pour créer des diaporamas. Il a été créé par Éric Meyer comme… …   Wikipédia en Français

  • JAR (format de fichier) — Pour les articles homonymes, voir JAR (homonymie). Java Archive Extension .jar …   Wikipédia en Français

  • WAR (format de fichier) — WAR (Web Application ARchive) Java Web Application Archive Extension .war Type MIME application/java archive Développé par Sun Microsystems Type de format Archive (avec Compression de données) Extension du …   Wikipédia en Français

  • CLASS — (CLS) est un célèbre groupe de l underground informatique. CLASS a cessé son activité le 8 janvier 2004 et en a profité pour réaliser une endtro . Selon leurs dires, ils auraient rippé 1234 jeux différents, et ont abandonné leur trône au profit… …   Wikipédia en Français

  • Java Class Library — Le Java Class Library (JCL) est une bibliothèque standard du langage Java, qui contient un ensemble de bibliothèques logicielles chargées dynamiquement. Le JCL a plusieurs buts : Comme les bibliothèques standard des autres langages, il… …   Wikipédia en Français

  • Liste d'extensions de fichiers — Sommaire 1 A 2 B 3 C 4 D 5 E 6 …   Wikipédia en Français

  • Formats (extensions) de fichiers — Liste d extensions de fichiers Sommaire 1 A 2 B 3 C 4 D 5 E …   Wikipédia en Français

  • Liste D'extensions De Fichiers — Sommaire 1 A 2 B 3 C 4 D 5 E …   Wikipédia en Français

  • Liste d'extentions de fichiers — Liste d extensions de fichiers Sommaire 1 A 2 B 3 C 4 D 5 E …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”