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:

Încărcarea unei clase în memorie

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ă
Class a = String.class;
Obțineți un Classobiect cu informații despre Stringclasă
Class b = Object.class;
Obțineți un Classobiect cu informații despre Objectclasă
Class c = Integer.class;
Obțineți un Classobiect cu informații despre Integerclasă
Class d = int.class;
Obțineți un Classobiect cu informații despre inttip
Class e = void.class;
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ă
Class a = "Hello".getClass();
Același obiect caString.class
Class b = new Integer().getClass();
Același obiect caInteger.class
Class c = Boolean.TRUE.getClass();
Același obiect caBoolean.class