Вече говорихме за факта, че класовете са сложни типове данни. Сега нека поговорим малко за другата страна на класовете - How класовете се обработват от Java машината. Не забравяйте, че в Java всичко е обект, дори клас. Класът е обект. Това учудва ли ви? Тогава да продължим.
Зареждане на клас в паметта
Всъщност, когато клас се зареди в паметта, се създават три специални "обекта":

Кратко описание на илюстрацията:
Жълт правоъгълник:
Кодовият файл се съхранява на диска като файл с разширение ".class". Той съдържа информация за класа, неговите полета и методи, Howто и изходния code на методите, компorран в byte code.
Оранжев правоъгълник:
Когато Java машината зареди клас в паметта, тя компorра byte codeа в машинен code, специфичен за процесора и операционната система на компютъра. Само Java машината има достъп до този машинен code. Като Java програмисти, ние нямаме достъп до него.
Зелен правоъгълник:
Java машината създава обект, който съдържа всички статични променливи и методи на класа. Имате достъп до този "обект", като използвате името на класа.
Например, когато пишете , вие се позовавате на статичната променлива, разположена в класа. Този обект е нашият зелен правоъгълник. И това е мястото, където се съхранява статичната променлива.java.lang.Math.PI
PI
java.lang.Math
java.lang.Math
PI
Син правоъгълник:
Когато Java машината зареди codeа на даден клас в паметта, тя създава специален java.lang.Class
обект, който съхранява информация за заредения клас: неговото име, имена на методи, имена и типове на полета и т.н.
Името "Клас" може да бъде малко объркващо. Би било по-логично да го наречем ClassInfo, тъй като този клас просто съхранява няHowва информация за заредения клас.
Можете да получите обекта Class за всеки тип, като използвате команда като тази:
Class name = ClassName.class;
Примери:
Код | Забележка |
---|---|
|
Вземете Class обект с информация за String класа |
|
Вземете Class обект с информация за Object класа |
|
Вземете Class обект с информация за Integer класа |
|
Вземете Class обект с информация за int типа |
|
Вземете Class обект с информация за void типа |
Можете също така да получите препратка към обект за описание на клас от всеки обект, тъй като всеки обект има метод getClass()
, който наследява от Object
класа.
Примери:
Код | Забележка |
---|---|
|
Същият обект катоString.class |
|
Същият обект катоInteger.class |
|
Същият обект катоBoolean.class |
GO TO FULL VERSION