1. Ключове слово new
У Java об’єкти будь-якого класу створюють за допомогою ключового слова new. Це «магічне» слово ніби просить JVM: виділи пам’ять для нового об’єкта й виклич для нього конструктор.
Аналогія:
Якщо клас — це креслення автомобіля, то new — це завод, який за цим кресленням збирає реальний автомобіль.
Приклад
Person vasya = new Person();
Що тут відбувається:
- new Person() — створюється новий об’єкт типу Person (викликається конструктор).
- vasya — змінна, у якій зберігається посилання на створений об’єкт.
Як це виглядає в пам’яті
Коли ви пишете Person vasya = new Person();, у пам’яті виділяється ділянка для полів об’єкта (наприклад, імʼя та вік), а змінна vasya містить адресу цієї ділянки — посилання.
Увага:
Якщо забути написати new, змінна буде просто посиланням, яке ні на що не вказує (null). Спроба звернутися до полів або методів такого «порожнього» об’єкта призведе до NullPointerException.
2. Виклик конструктора: як це працює?
Конструктор — це спеціальний метод, який викликається під час створення об’єкта й ініціалізує його поля, готуючи екземпляр до роботи.
Синтаксис
ИмяКласса имяПеременной = new ИмяКласса(аргументы);
- Якщо клас має конструктор із параметрами, їх обов’язково слід передати.
- Якщо це конструктор без параметрів (конструктор за замовчуванням), дужки залишаються порожніми.
Приклад: конструктор із параметрами
public class Person {
String name;
int age;
// Конструктор із параметрами
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
Створімо об’єкт:
Person petya = new Person("Петро", 25);
Значення "Петро" і 25 потраплять у поля name і age нового об’єкта.
Конструктор без параметрів
public Person() {
this.name = "Безіменний";
this.age = 0;
}
Тепер можна написати:
Person mysteryMan = new Person(); // name="Безіменний", age=0
3. Робота з об’єктом: поля та методи
Після створення об’єкта ви можете звертатися до його полів і методів через оператор крапки (.):
petya.name = "Петро";
System.out.println(petya.name); // Петро
petya.sayHello();
Якщо у класі є метод:
public void sayHello() {
System.out.println("Привіт, мене звати " + name + "!");
}
Тоді виклик petya.sayHello(); виведе: «Привіт, мене звати Петро!»
Приклад: повний клас
public class Person {
String name;
int age;
public Person(String name, int age) { // конструктор
this.name = name;
this.age = age;
}
public void sayHello() { // метод
System.out.println("Привіт, мене звати " + name + "!");
}
}
Приклад використання:
Person vasya = new Person("Вася", 30);
vasya.sayHello(); // Привіт, мене звати Вася!
4. Посилальні змінні: що це таке?
Змінна типу класу в Java — це посилання на об’єкт у пам’яті, а не сам об’єкт.
Демонстрація
Person vasya = new Person("Вася", 30);
Person anotherVasya = vasya;
Тепер і vasya, і anotherVasya вказують на один і той самий об’єкт у пам’яті. Якщо змінити поле через одну змінну — воно зміниться й для іншої:
anotherVasya.age = 31;
System.out.println(vasya.age); // 31
Важливий момент:
Якщо створити два різні об’єкти, вони незалежні:
Person petya = new Person("Петро", 25);
Person masha = new Person("Маша", 22);
petya.age = 99;
System.out.println(masha.age); // 22 (не змінилося!)
5. Приклад: створення та використання кількох об’єктів
Додамо у застосунок кілька об’єктів. Нехай у нас буде клас Person, а в методі main створимо кількох людей і виведемо їхні привітання.
Клас Person
public class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void sayHello() {
System.out.println("Привіт, мене звати " + name + ", мені " + age + " років!");
}
}
Використання у методі main
public class Main {
public static void main(String[] args) {
Person vasya = new Person("Вася", 25);
Person petya = new Person("Петро", 27);
vasya.sayHello(); // Привіт, мене звати Вася, мені 25 років!
petya.sayHello(); // Привіт, мене звати Петро, мені 27 років!
// Демонстрація незалежності об’єктів:
vasya.age = 100;
vasya.sayHello(); // Привіт, мене звати Вася, мені 100 років!
petya.sayHello(); // Привіт, мене звати Петро, мені 27 років!
}
}
Результат виконання програми:
Привіт, мене звати Вася, мені 25 років!
Привіт, мене звати Петро, мені 27 років!
Привіт, мене звати Вася, мені 100 років!
Привіт, мене звати Петро, мені 27 років!
6. Типові помилки під час створення об’єктів
Помилка № 1: Забули написати new
Person vasya;
vasya.name = "Вася"; // NullPointerException!
Змінна vasya не посилається ні на який об’єкт (null). Обов’язково слід створити об’єкт за допомогою new.
Помилка № 2: Не передали параметри в конструктор
Person petya = new Person(); // Помилка компіляції, якщо немає конструктора без параметрів
Якщо в класі є лише конструктор із параметрами, ці параметри обов’язково слід вказати під час створення об’єкта.
Помилка № 3: Вважаєте, що змінна зберігає сам об’єкт
Person a = new Person("Аня", 20);
Person b = a;
b.age = 99;
System.out.println(a.age); // 99, тому що a і b — це посилання на один об’єкт!
У Java змінна типу класу — завжди посилання, а не сам об’єкт.
Помилка № 4: Змінюєте поля одного об’єкта, очікуючи, що інший не зміниться
Person x = new Person("X", 1);
Person y = x;
x.age = 42;
System.out.println(y.age); // 42
Якщо потрібні два незалежні об’єкти — створюйте їх окремо!
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ