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.PIPIjava.lang.Mathjava.lang.MathPI
dreptunghi albastru:
Când mașina Java încarcă codul unei clase în memorie, creează un java.lang.Classobiect 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 Classobiect cu informații despre Stringclasă |
|
Obțineți un Classobiect cu informații despre Objectclasă |
|
Obțineți un Classobiect cu informații despre Integerclasă |
|
Obțineți un Classobiect cu informații despre inttip |
|
Obțineți un Classobiect cu informații despre voidtip |
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 Objectclasă.
Exemple:
| Cod | Notă |
|---|---|
|
Același obiect caString.class |
|
Același obiect caInteger.class |
|
Același obiect caBoolean.class |
GO TO FULL VERSION