Ми вже пояснювали, що класи — це складні типи даних. А тепер трохи поговоримо про обробку класів Java-машиною: у Java все є об'єктом, навіть клас. Клас — це об'єкт. Цікаво? Тоді йдемо далі.
Завантаження класу в пам'ять
Насправді під час завантаження класу в пам'ять створюються три спеціальних «об'єкти»:

Короткий опис малюнка
Жовтий прямокутник:
Файл із кодом має розширення імені «.class» і зберігається на диску. Він містить інформацію про клас, його поля й методи, а також код методів, скомпільований у байт-код.
Помаранчевий прямокутник:
Завантажуючи клас у пам'ять, Java-машина компілює його байт-код у машинний код із урахуванням характеристик комп'ютера — типу процесора й операційної системи. Доступ до цього машинного коду має тільки Java-машина: програмісти доступу до нього не мають.
Зелений прямокутник:
Java-машина створює певний «об'єкт», який містить усі статичні змінні й методи класу. Доступ до цього «об'єкта» здійснюється за іменем класу.
Наприклад, коли ви пишете java.lang.Math.PI
, ви звертаєтеся до статичної змінної PI
, що міститься в класі java.lang.Math
. Саме цей клас java.lang.Math
і показано на зеленому прямокутнику. І саме в ньому зберігається статична змінна PI
.
Синій прямокутник:
Коли Java-машина завантажує код класу в пам'ять, вона створює спеціальний об'єкт типу java.lang.Class
, в якому зберігається інформація про завантажений клас: його ім'я, імена методів, імена й типи полів тощо.
Назва «Class» може дещо збивати з пантелику. Логічніше було б назвати цей об'єкт ClassInfo: він лише зберігає певну інформацію про завантажений клас.
Отримати об'єкт класу можна для будь-якого типу за допомогою такої команди:
Class ім'я = Ім'яКласу.class;
Приклади:
Код | Примітка |
---|---|
|
Отримуємо об'єкт типу Class з інформацією про клас String |
|
Отримуємо об'єкт типу Class з інформацією про клас Object |
|
Отримуємо об'єкт типу Class з інформацією про клас Integer |
|
Отримуємо об'єкт типу Class з інформацією про тип int |
|
Отримуємо об'єкт типу Class з інформацією про тип void |
Посилання на об'єкт з описом класу можна також отримати для об'єкта: для цього кожен об'єкт має метод getClass()
, успадкований від класу Object
.
Приклади:
Код | Примітка |
---|---|
|
Той самий об'єкт, що й String.class |
|
Той самий об'єкт, що й Integer.class |
|
Той самий об'єкт, що й Boolean.class |
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ