Am vorbit deja despre faptul că clasele sunt tipuri de date complexe. Acum să vorbim puțin despre cealaltă parte a claselor - cum sunt gestionate clasele de mașina Java. Amintiți-vă că în Java totul este un obiect, chiar și o clasă. O clasă este un obiect. Asta te surprinde? Atunci hai să continuăm.
Încărcarea unei clase în memorie
De fapt, atunci când o clasă este încărcată în memorie, sunt create trei „obiecte” speciale:
Scurtă descriere a ilustrației:
dreptunghi galben:
Fișierul de cod este stocat pe disc ca un fișier cu extensia „.class”. Conține informații despre clasă, câmpurile și metodele sale, precum și codul sursă al metodelor compilate în bytecode.
dreptunghi portocaliu:
Când mașina Java încarcă o clasă în memorie, compilează bytecode în codul de mașină specific procesorului și sistemului de operare al computerului. Doar mașina Java are acces la acest cod de mașină. Ca programatori Java, nu avem acces la el.
dreptunghi verde:
Mașina Java creează un obiect care conține toate variabilele și metodele statice ale clasei. Accesați acest „obiect” folosind numele clasei.
De exemplu, când scrieți , vă referiți la variabila statică situată în clasă. Acest obiect este dreptunghiul nostru verde. Și acolo este stocată variabila statică.java.lang.Math.PI
PI
java.lang.Math
java.lang.Math
PI
dreptunghi albastru:
Când mașina Java încarcă codul unei clase în memorie, creează un java.lang.Class
obiect special, care stochează informații despre clasa încărcată: numele acesteia, numele metodelor, numele și tipurile câmpurilor etc.
Numele „Clasă” poate fi puțin confuz. Ar fi mai logic să-l numim ClassInfo, deoarece această clasă stochează doar câteva informații despre clasa încărcată.
Puteți obține obiectul Class pentru orice tip folosind o comandă ca aceasta:
Class name = ClassName.class;
Exemple:
Cod | Notă |
---|---|
|
Obțineți un Class obiect cu informații despre String clasă |
|
Obțineți un Class obiect cu informații despre Object clasă |
|
Obțineți un Class obiect cu informații despre Integer clasă |
|
Obțineți un Class obiect cu informații despre int tip |
|
Obțineți un Class obiect cu informații despre void tip |
De asemenea, puteți obține o referință la un obiect de descriere a clasei de la orice obiect, deoarece fiecare obiect are metoda getClass()
pe care o moștenește din Object
clasă.
Exemple:
Cod | Notă |
---|---|
|
Același obiect caString.class |
|
Același obiect caInteger.class |
|
Același obiect caBoolean.class |
GO TO FULL VERSION