Napag-usapan na natin ang katotohanan na ang mga klase ay kumplikadong mga uri ng data. Ngayon ay pag-usapan natin nang kaunti ang tungkol sa kabilang panig ng mga klase — kung paano pinangangasiwaan ng Java machine ang mga klase. Tandaan na sa Java ang lahat ay isang bagay, kahit isang klase. Ang isang klase ay isang bagay. Nagulat ka ba niyan? Pagkatapos ay magpatuloy tayo.

Nilo-load ang isang klase sa memorya

Sa totoo lang, kapag ang isang klase ay na-load sa memorya, tatlong espesyal na "mga bagay" ang nilikha:

Nilo-load ang isang klase sa memorya

Maikling paglalarawan ng ilustrasyon:

Dilaw na parihaba:

Ang code file ay naka-imbak sa disk bilang isang file na may extension na ".class". Naglalaman ito ng impormasyon tungkol sa klase, mga field at pamamaraan nito, pati na rin ang source code ng mga pamamaraan na pinagsama-sama sa bytecode.

Orange na parihaba:

Kapag nag-load ang Java machine ng isang klase sa memorya, kino-compile nito ang bytecode sa machine code na partikular sa processor at operating system ng computer. Ang Java machine lang ang may access sa machine code na ito. Bilang Java programmer, wala kaming access dito.

Berdeng parihaba:

Lumilikha ang makina ng Java ng isang bagay na naglalaman ng lahat ng mga static na variable at pamamaraan ng klase. Maa-access mo ang "bagay" na ito gamit ang pangalan ng klase.

Halimbawa, kapag sumulat ka , tinutukoy mo ang static na variable na matatagpuan sa klase. Ang bagay na ito ay ang aming berdeng parihaba. At doon naka-imbak ang static na variable.java.lang.Math.PIPIjava.lang.Mathjava.lang.MathPI

Asul na parihaba:

Kapag na-load ng Java machine ang code ng isang klase sa memorya, lumilikha ito ng isang espesyal java.lang.Classna bagay, na nag-iimbak ng impormasyon tungkol sa na-load na klase: ang pangalan nito, mga pangalan ng pamamaraan, mga pangalan at uri ng field, atbp.

Ang pangalang "Class" ay maaaring medyo nakakalito. Mas makatuwirang tawagin itong ClassInfo, dahil ang klase na ito ay nag-iimbak lamang ng ilang impormasyon tungkol sa na-load na klase.

Maaari mong makuha ang Class object para sa anumang uri gamit ang isang command na tulad nito:

Class name = ClassName.class;

Mga halimbawa:

Code Tandaan
Class a = String.class;
Kumuha ng isang Classbagay na may impormasyon tungkol sa Stringklase
Class b = Object.class;
Kumuha ng isang Classbagay na may impormasyon tungkol sa Objectklase
Class c = Integer.class;
Kumuha ng isang Classbagay na may impormasyon tungkol sa Integerklase
Class d = int.class;
Kumuha ng isang Classbagay na may impormasyon tungkol sa inturi
Class e = void.class;
Kumuha ng isang Classbagay na may impormasyon tungkol sa voiduri

Maaari ka ring makakuha ng reference sa isang object ng paglalarawan ng klase mula sa anumang bagay, dahil ang bawat object ay may getClass()pamamaraan, na minana nito mula sa Objectklase.

Mga halimbawa:

Code Tandaan
Class a = "Hello".getClass();
Parehong bagay bilangString.class
Class b = new Integer().getClass();
Parehong bagay bilangInteger.class
Class c = Boolean.TRUE.getClass();
Parehong bagay bilangBoolean.class