clasă (format fișier)

Clasa Java Imagine în Infobox. Caracteristici
Extensie .class
Tip MIME application/java-vm, application/x-httpd-java
PUID x-fmt / 415
Semnătură CA FE BA BE( hexa )
Dezvoltat de Oracol
Tipul formatului Executabil
Standard Specificații Java
Specificație Formatul deschis

În limbajul de programare Java , codul sursă care se află într-un fișier text printr-o compilație de operații produce un fișier executabil (sau mai multe) a cărui extensie este .class . Un astfel de fișier este încărcat ulterior în memorie de către încărcătorul de clase al oricărei mașini virtuale Java (JVM) pentru a obține definiția clasei în timpul rulării.

Deoarece unul dintre obiectivele Java este de a fi independent de platformă, instrucțiunile din codul sursă sunt convertite într-un cod specific numit bytecode (și nu în limbajul mașinii computerului de compilare) care este stocat într-un fișier de clasă întotdeauna cu extensia . clasa . Pentru a asigura independența Java față de platforma de execuție, formatul de fișier .class este înghețat, astfel încât rezultatul compilării pe o mașină să poată rula pe oricare alta.

Structura fișierului

Convenția unei JVM este să funcționeze întotdeauna în big-endian . În descrierile care urmează atunci când un număr este codat pe 2 octeți, de exemplu, cel mai semnificativ octet va fi citit mai întâi.

Fișierul conține un număr de tabele, toate au aceeași structură: un contor de 2 octeți urmat de un număr fix sau variabil de octeți pentru fiecare element al tabelului.

Secțiuni

Fișierul este împărțit în zece secțiuni (dintre care majoritatea variază în mărime). Iată descrierea lor în ordinea pe care o întâlnesc într-un fișier de clasă.

numele de familie funcţie a tăia Descriere
număr magic permite JVM să recunoască un fișier .class 4 octeți secvența de valori 0xCA 0xFE 0xBA 0xBE ( CAFEBABE )
versiune permite JVM să verifice dacă este compatibil cu acest fișier .class De 2 ori 2 octeți numărul versiunii fișierului, părți minore (întotdeauna 0) apoi majore (vezi notele de mai jos)
constante vezi secțiunea următoare variabil tabel, fiecare constantă ocupă o dimensiune variabilă
masca de acces codificați diferite steaguri referitoare la clasă ( privat , public , abstract ...) 2 octeți mască de biți
numele clasei numele acestei clase în format intern 2 octeți indicatorul din tabelul constantelor către identificatorul intern al acestei clase
clasa părinte numele clasei părinte a acestei clase 2 octeți indicatorul din tabelul constantelor către identificatorul intern al clasei părinte
interfețe implementate enumerați interfețele părinte ale acestei clase variabil tabel, 2 octeți pe pointer în tabelul de constante la identificatorul intern al unei clase
variabile descrie fiecare variabilă a acestei clase variabil tabel, vezi secțiunea de descriere a membrilor clasei
metode descrie fiecare metodă a acestei clase variabil tabel, vezi secțiunea de descriere a membrilor clasei
atribute oferă atribute ale clasei (numele fișierului sursă etc.) variabil tabel, fiecare atribut ocupă o dimensiune variabilă

Note:

Constante

Tabelul constantelor stochează majoritatea valorilor constante din clasă (numere sau texte), precum și elemente mai avansate (tipuri de date, nume de clase, nume de atribute etc.) Fiecare constantă este descrisă de un prim octet care își codifică tipul. urmat de un număr fix sau variabil de octeți în funcție de tipul de date.

Contorul tabelului de constante nu este niciodată identic cu numărul de constante, deoarece din motive istorice numerotarea lor începe de la 1 (nu la 0) și, în plus, două tipuri de constante consumă două numere în loc de doar unul.

Sunt definite următoarele tipuri de constante:

tip funcţie dimensiune (pe lângă octetul care codifică tipul) Descriere
CONSTANT_Integer (3)
CONSTANT_Float (4)
Număr de 32 de biți utilizat în codul Java 4 octeți Număr întreg relativ pe 32 de biți sau număr cu virgulă mobilă cu o singură precizie IEEE 754
CONSTANT_Long (5)
CONSTANT_Double (6)
Număr de 64 de biți utilizat în codul Java 8 octeți Număr întreg relativ relativ pe 64 de biți sau număr cu virgulă mobilă IEEE 754 cu precizie dublă
CONSTANT_Utf8 (1) text variabil 2 contori octeți urmat de acest număr de octeți reprezentând un text Unicode codificat UTF-8 modificat
CONSTANT_String (8) șir de caractere utilizat în codul Java 2 octeți pointer în tabelul de constante la un CONSTANT_Utf8 reprezentând un java.lang.String utilizat în codul Java
CONSTANT_Class (7) numele unei clase sau a unei interfețe în format intern 2 octeți indicatorul din tabelul de constante la un CONSTANT_Utf8 reprezentând numele unei clase
CONSTANT_NameAndType (12) identificatorul și tipul unui membru al clasei De 2 ori 2 octeți doi indicatori în tabelul constantelor la CONSTANT_Utf8 reprezentând pe de o parte un identificator în codul Java și pe de altă parte un tip de date sau o semnătură de metodă în format intern
CONSTANT_Fieldref (9)
CONSTANT_Methodref (10)
CONSTANT_InterfaceMethodref (11)
referire la un membru al clasei De 2 ori 2 octeți doi indicatori în tabelul de constante către o CONSTANT_Class care descrie clasa de bază (sau interfață) a membrului și cealaltă către un CONSTANT_NameAndType care descrie numele și tipul membrului

Note:

Variabile și metode

Membrii unei clase sunt descriși de două tabele. Fiecare descriere a membrilor conține următoarele informații.

numele de familie funcţie a tăia Descriere
masca de acces codificați diferite stegulețe referitoare la variabilă sau metodă ( privat , public , final ...) 2 octeți mască de biți
nume de utilizator numele variabilei sau metodei 2 octeți indicatorul din tabelul de constante la un CONSTANT_Utf8 care reprezintă identificatorul din codul Java
tip tipul de date stocate în variabilă sau semnătura metodei 2 octeți pointer în tabelul de constante la un CONSTANT_Utf8 reprezentând un tip de date în format intern
atribute oferă atributele membrului variabil tabel, fiecare atribut ocupă o dimensiune variabilă

Atribute

Tabelul de atribute începe ca toate tabelele, cu numărul de atribute codate pe 2 octeți .

Fiecare atribut este definit de 2 octeți care indică un CONSTANT_Utf8 care furnizează numele acestui atribut urmat de 4 octeți care furnizează numărul de octeți de date ai atributului (în acest fel, dacă un atribut nu este recunoscut de o anumită JVM , ea îl poate ignora cu ușurință ).

În funcție de contextul de utilizare (atribute de clasă, variabilă sau metodă), atributele pot furniza numele fișierului sursă, numărul liniei sursă a unei declarații etc.

Un atribut esențial pentru o variabilă statică finală (o constantă) este ConstantValue, care oferă valoarea sa.

Un atribut esențial pentru o metodă non-abstractă este Codul care conține codul secundar al codului Java compilat.

Note și referințe

Note

Referințe

  1. Specificația oficială a mașinii Java2 conține descrierea formatului de fișier, este disponibilă online în versiunea sa din 1999; cea mai recentă versiune a acestei specificații este JSR 202.

linkuri externe