Змінні типу класів в Java, Портал знань, портал знань, дистанційне навчання
2.1.10.1. Створення змінних типу класів
де ім'я типу для змінних типу класів є ідентифікатором класу, наприклад:
оголошує два змінних класу MyClass з іменами obj 1 та obj 2 .
Аналогічно змінним примітивних типів, змінні типів посилань також перед своїм використанням повинні отримати певні значення. Для оголошеної змінної типу класу створити конкретний об'єкт , екземпляр ( instance ) описаного класу.
Коли створюється об'єкт, зазвичай, необхідно ініціалізувати його змінні. І тому класі визначається спеціальний метод чи перевантажені методи, імена яких збігаються з ім'ям класу. Ці методи називають конструкторами. Конструктор відрізняється від звичайних методів наступними основними особливостями (інші особливості конструкторів будуть розглянуті пізніше):
- конструктор не повинен повертати жодного значення;
- тип повертається для конструктора не вказується (але можна вказати модифікатор доступу public або private ).
Створення об'єкта виконується за допомогою оператора, який має наступний формат:
ідентифікатор-змінної = new ідентифікатор-конструктора (параметри);
де ідентифікатор-змінної – ім'я створюваного об'єкта, ідентифікатор-конструктора – ім'я конструктора класу, що викликається, параметри – список параметрів, що передаються конструктору класу.
Приклади створення об'єктів:
obj 1 = New MyClass ();
obj 2 = New MyClass (12, 5);
Для створення об'єкта obj 1 викликається конструктор класу MyClass без параметрів, а для створення об'єкта obj 2 викликається інший конструктор цього ж класу, якому як аргумент передаються два цілих числа.
MyClass obj 3= New MyClass (8, 4);
2.1.10.2. Змінні та методи об'єкта
Як мовилося раніше, в описі класу визначаються змінні та методи, використовувані у цьому класі. При створенні об'єкта змінні в різних об'єктах класу мають однакове ім'я, але можуть мати різні значення, причому зміна змінної в одному примірнику ніяк не впливає на значення тієї ж змінної в іншому примірнику, оскільки в кожному об'єкті цих змінних виділяється своя область пам'яті. Хоча під методи класу пам'ять виділяється лише один раз, але кожен об'єкт класу звертається до методів класу незалежно від інших об'єктів. Тому такі змінні та методи називаються змінними та методами екземпляра класу (instance variables and methods) або змінними та методами об'єкта. Звернення до змінних та виклик методів об'єкта в Java має такий формат:
де ім'я-об'єкта – це ідентифікатор змінної об'єкта класу, ім'я-змінної – ідентифікатор змінної класу, ім'я-метода – ідентифікатор методу класу, а аргументи – значення, що задаються під час виклику методу. Наприклад, якщо у класі визначено змінну var 1 типу int , то визначення її значення в об'єкті obj 1 і obj 2 можна виконати за допомогою наступного оператора:
int var 1 InObj 1 = obj 1. var 1;
Зміну значення змінної var 1 для об'єкта obj 2 можна виконати за допомогою наступного оператора:
obj 2. var 1 = 12;
Виклик методу setVar 1 визначеного в класі MyClass і встановлює значення змінної var 1 для об'єктів obj 1 і obj 2 виконується за допомогою наступних операторів:
obj 1. setVar 1(2);
obj 2. setVar 1(2);
Якщо ім'я об'єкта не задано, то для змінної чи методу не задано, то компілятор Java вважає, що ця змінна чи методвизначено у даному класі. У цьому випадку замість імені об'єкта вказати ключове слово this . Зазвичай така вказівка використовується в тих випадках, якщо ім'я змінної класу та аргумент методу у класі збігаються, наприклад:
void setVar1(int var1)
this . var 1 = var 1;
У цьому прикладі змінної класу var 1 присвоюється значення параметра var 1 визначеного в методі setVar 1() . Якби параметр у методі мав інше ім'я, наприклад, var, ключове слово this можна було не вказувати і оператор присвоювання можна було б записати у вигляді:
2.1.10.3. Змінні та методи класу
Модифікатор static визначає змінну, загальну для всіх об'єктів даного класу. Зазвичай кожної генерації об'єкта змінним класу виділяється нова пам'ять, але ці члени класу оголошуються з модифікатором static , їм виділяється місце лише один раз, незалежно від цього, скільки об'єктів було створено. Так, оголошену у класі MyClass змінну
static int objectCount;
можна використовувати для підрахунку згенерованих об'єктів класу MyClass.
Для роботи зі статичними змінними зазвичай створюються статичні методи, позначені модифікатором static.
Статичні методи та змінні називають також методами та змінними класу (class variables and methods), оскільки до них можна звертатися, вказуючи не ім'я об'єкта, а ім'я класу. Наприклад, нехай змінна var 2 та метод setVar 2 визначені у класі MyClass як статичні:
static int var2 = 0;
static void setVar2(int var)
Тоді звернення до цієї змінної та методу матиме у програмі такий вигляд:
int val2Value = MyClass.var2;
Статичні змінні ініціалізуються ще до роботи конструктора, але за ініціалізації можнавикористовувати лише константні вирази, як це зроблено вище для змінної var 2 . Якщо ж ініціалізація вимагає складних обчислень, наприклад, циклів для завдання значень елементам статичних масивів або звернень до методів, то ці обчислення укладають у блок, позначений словом static , який також буде виконаний до запуску конструктора, наприклад:
static int var2;
Основна особливість статичних змінних та методів: доступ до них виконується, навіть якщо не створено жодного екземпляра класу. Крім того, для статичних методів діють такі основні обмеження:
- у статичному методі не можна використовувати посилання this;
- у статичному методі не можна звертатися до нестатичних змінних (тобто. всі змінні, оголошені поза статичним методом і використовувані всередині нього, повинні бути оголошені з модифікатором static);
- у статичному методі не можна прямо викликати нестатичні методи (тобто. всі методи, що викликаються зі статичного методу, мають бути оголошені з модифікатором static).
Останні дві умови можна обійти, якщо звертатися до змінних та методів об'єкта. Так, якщо всередині статичного методу setVar 2 є пряме звернення до нестатичної змінної var 1 це це викличе повідомлення про помилку, проте звернення до var 1 як до змінної об'єкта obj 1 - obj 1. var 1 помилки не викличе.
2.1.10.4. Операції над об'єктами
Об'єкти в Java можуть об'єднуватися за допомогою наступних знаків операцій:
- привласнення " = " – присвоєння покажчика на об'єкт посилальної змінної (у своїй нової копії об'єкта не створюється);
- перевірка на рівність " == " і нерівність " != " – результатом цих операцій буде true чи false , залежно від цього, чи вказують порівнювані змінні натой самий об'єкт у пам'яті.
Крім того, для об'єктів визначено операцію
ім'я-об'єкта instanceof ім'я-класу
Результатом цієї операції є true якщо об'єкт з ідентифікатором ім'я-об'єкта є реалізацією класу з ідентифікатором ім'я-класу, і false – в іншому випадку.
Приклади операцій над об'єктами:
MyClass obj 4 = New MyClass (15, 7);
boolean isEqual1, isEqual2, isInstance;
// isEqual1 - true (посилання на obj4 і obj6
// вказують на той самий об'єкт)
isEqual = obj6 == obj4;
// isEqual2 - false (obj4 і obj5 мають однакові
// Показники, але вказують різні об'єкти)
isEqual2 = obj4 == obj5;
// isInstance - true (obj4 є об'єктом