Створення об'єктів
Майже весь код, написаний на мові Java - це класи та об'єкти, тому що java - об'єктно-орієнтована мова. Java-об'єкти зберігають свій стан у змінних, ці змінні ще називають полями або членами екземпляру класу.
Об'єкт - це деяка сутність у віртуальному просторі, що має певний стан і поведінку, задані значення властивостей (атрибутів) та операцій над ними (методів).
Наприклад, зелена "Тойота" вашого сусіда є екземпляром класу "Автомобіль".
Об'єкт – це конкретна реалізація певного класу. На основі одного класу може бути створено безліч об'єктів.
Наприклад, зелена "Тойота" вашого сусіда є екземпляром класу "Автомобіль".
Об'єкт – це конкретна реалізація певного класу. На основі одного класу може бути створено безліч об'єктів.
При цьому в об'єктах виділяють:
- Поведінку об'єкту – що можна з робити з даним об'єктом, або які методи можна застосовувати до нього
- Стан об'єкту – те як об'єкт змінюється, коли Ви застосовуєте його методи
- Ідентичність об'єкту – відмінність об'єкту від інших об'єктів. Об'єкти можуть мати однаковий стан, проте все рівно вони ідентифікуються як різні об'єкти.
Щоб створити об’єкт певного класу програміст викликає один з конструкторів даного класу. Спеціальні методи, які покликані задати об'єкту початковий стан і носять його ім'я.
new Date(); //створення об'єкту, який містить поточний час
new Date(); //створення об'єкту, який містить поточний час
Проте такий підхід застосовується якщо об’єкт потрібен нам в програмі лише раз. Якщо ж його потрібно буде використати повторно, то для цього використовуються об'єктні змінні. Змінні, які посилаються на певний об’єкт.
Date curDate = new Date();
Отже, процес створення об'єктів складається з трьох частин:
- Декларація - процес «зв'язування» змінної з типом об'єкта - Date curDate
- Створення примірника - ключове слово new створює об'єкт - new
- Ініціалізація - після ключового слова 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, на один з яких відсутнє посилання.
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, на один з яких відсутнє посилання.
Ініціалізація об'єктів
Якщо конструктор явно не створити, то все одно він буде створений за замовчуванням.
Перевантажений конструктор викликається в залежності від параметрів, зазначених при виконанні операції new.
Операції з посиланнями на об'єкти
- Доступ до поля, з використанням кваліфікованого імені або виразу доступу до поля
- Виклик методу
- Операція приведення
- Конкатенація посилання з рядком (буде використано метод toString()
- Операція instanceof
- Операції рівності == і ! =
- Умовна операція ? :
Дії над посиланнями
Присвоювання посилань:
- Box b1 = new Box(); Box b2 = b1;
- b1 = null ;
- b2 = null;
- b1 = new Box();
null - це спеціальний літерал, який може бути будь-якого типу, змінну такого типу створити не можна.
Використання об'єктів
- Усередині класу доступ до полів відбувається за іменем поля
- За межами класу доступ до полів відбувається з використанням посилання на об'єкт і оператора крапка (.) Наприклад, .objectReference.fieldName
- Всередині класу – за іменем методу
- За межами класу доступ до полів відбувається з використанням посилання на об'єкт і оператора крапка (.) Наприклад, objectReference.methodName(args)