Назад Зміст Вперед

Об'єкти

Створення об'єктів

Майже весь код, написаний на мові Java - це класи та об'єкти, тому що java - об'єктно-орієнтована мова. Java-об'єкти зберігають свій стан у змінних, ці змінні ще називають полями або членами екземпляру класу.
Об'єкт - це деяка сутність у віртуальному просторі, що має певний стан і поведінку, задані значення властивостей (атрибутів) та операцій над ними (методів).
Наприклад, зелена "Тойота" вашого сусіда є екземпляром класу "Автомобіль".
Об'єкт – це конкретна реалізація певного класу. На основі одного класу може бути створено безліч об'єктів. 
При цьому в об'єктах виділяють:
  • Поведінку об'єкту – що можна з робити з даним об'єктом, або які методи можна застосовувати до нього
  • Стан об'єкту – те як об'єкт змінюється, коли Ви застосовуєте його методи
  • Ідентичність об'єкту – відмінність об'єкту від інших об'єктів. Об'єкти можуть мати однаковий стан, проте все рівно вони ідентифікуються як різні об'єкти.
Об'єкт може існувати самостійно. До цього об'єкту можна ставити запитання за допомогою методів і ці самі методи можу давити відповідь, повертаючи значення.

Щоб створити об’єкт певного класу програміст викликає один з конструкторів даного класу. Спеціальні методи, які покликані задати об'єкту початковий стан і носять його ім'я.
new Date(); //створення об'єкту, який містить поточний час

Проте такий підхід застосовується якщо об’єкт потрібен нам в програмі лише раз. Якщо ж його потрібно буде використати повторно, то для цього використовуються об'єктні змінні. Змінні, які посилаються на певний об’єкт.
Date curDate = new Date();


Отже, процес створення об'єктів складається з трьох частин:
  1. Декларація - процес «зв'язування» змінної з типом об'єкта - Date curDate 
  2. Створення примірника - ключове слово new створює об'єкт - new
  3. Ініціалізація - після ключового слова new йде виклик конструктора який ініціалізує об'єкт - Date();

Робота з посиланнями

Посилання - це вказівник на щось. Існує три види типів посилань:
  • класовий тип SomeClassseRef 
  • інтерфейсний тип SomeInterface someInterfaceRef 
  • тип масив int[] someArrayRef 
Декларація типу посилання не створює об'єкт!

Оператор new створює екземпляр об'єкта, виділяючи під нього пам'ять. Має лише один постфіксний аргумент - виклик конструктора. new повертає посилання на створений об'єкт. Необов'язково привласнювати змінній посилання на створений об'єкт:
int height = (new Rectangle ()).getHeight();

Посилання на об'єкти, також передаються в методи за значенням. Це означає, що коли метод завершить свою роботу, передане посилання як і раніше буде вказувати на той же об'єкт, що і вказувало до виклику методу. Проте, значення полів об'єкта можуть бути змінені в методі, якщо вони мають відповідний рівень доступу. 
Наприклад, маємо клас виду

class Demo{
public int a;
}


та метод, що використовує посилання на нього

class Test{
void someVoid(Demo d){
d.a = 20;
d = new Demo();
d.a =40;
}
}


Після виконання наступного коду:

Demo demo = new Demo();
Test test = new Test();
test.someVoid(demo);
System.out.println(demo.a)


Матимемо на екрані 20;

При цьому в пам'яті JVM буде два об'єкти типу Demo, на один з яких відсутнє посилання.

Ініціалізація об'єктів


У Java розробник класів може гарантувати ініціалізацію кожного об'єкта, забезпечивши спеціальний метод, що називають конструктором. Якщо клас має конструктор, Java автоматично викликає конструктор, коли створюється об'єкт.

Якщо конструктор явно не створити, то все одно він буде створений за замовчуванням. 

Перевантажений конструктор викликається в залежності від параметрів, зазначених при виконанні операції new.

Операції з посиланнями на об'єкти

  • Доступ до поля, з використанням кваліфікованого імені або виразу доступу до поля 
  • Виклик методу 
  • Операція приведення 
  • Конкатенація посилання з рядком (буде використано метод toString() 
  • Операція instanceof 
  • Операції рівності == і ! = 
  • Умовна операція ? :  
Дії над посиланнями
Присвоювання посилань:
  • Box b1 = new Box(); Box b2 = b1;
  • b1 = null ;
  • b2 = null;
  • b1 = new Box();
null - це спеціальний літерал, який може бути будь-якого типу, змінну такого типу створити не можна.

Використання об'єктів

Доступ до полів
  • Усередині класу доступ до полів відбувається за іменем поля 
  • За межами класу доступ до полів відбувається з використанням посилання на об'єкт і оператора крапка (.) Наприклад, .objectReference.fieldName 
Виклик методів:
  • Всередині класу – за іменем методу 
  • За межами класу доступ до полів відбувається з використанням посилання на об'єкт і оператора крапка (.) Наприклад, objectReference.methodName(args)

Збирач сміття


.