Перейти до основного вмісту
Модуль 2 · Урок 1 із 23/14 у курсі~12 min
Модульні уроки (1/2)

Класи та об'єкти

Java — це мова, орієнтована на об’єктно-орієнтоване програмування (ООП). В ООП ми моделюємо реальний світ за допомогою об’єктів. Об’єкт має стан (дані) і поведінку (дії).

Класи та об'єкти

  • Клас: це проект (або шаблон), який визначає властивості та поведінку типу об’єкта.
  • Об’єкт: це конкретний екземпляр, створений з класу.

Наприклад, якщо Car є класом, ваш автомобіль у гаражі є фактичним об’єктом.

Поля екземплярів і конструктори

Дані всередині класу називаються полями екземплярів (або атрибутами). Для ініціалізації стану об’єкта в момент його створення ми використовуємо спеціальний метод, який називається конструктором.

Конструктор має те саме ім’я, що й клас і не має типу повернення (навіть void).

Java
class Dog {
    // Instance fields
    String name;
    int age;

    // Constructor
    public Dog(String name, int age) {
        this.name = name; // 'this' refers to the current object's field
        this.age = age;
    }
}

Створення об’єкта за допомогою new

Щоб створити об’єкт у пам’яті, ми використовуємо ключове слово new, за яким слідує конструктор класу:

Java
public class Main {
    public static void main(String[] args) {
        // Creating a Dog object
        Dog myDog = new Dog("Fido", 3);

        // Accessing fields
        System.out.println(myDog.name + " is " + myDog.age + " years old.");
    }
}

Посилання на this

Ключове слово this в Java посилається на поточний об’єкт, на якому виконується конструктор або метод. Він в основному використовується для уникнення неоднозначності, коли параметри конструктора мають те саме ім’я, що й поля екземпляра об’єкта (затінення змінної):

Java
class User {
    String username;

    public User(String username) {
        this.username = username; // this.username is the instance field, username is the parameter
    }
}

Розподіл пам'яті: стек проти купи

Важливо розуміти, як Java розподіляє пам'ять:

  1. Стек: це швидка та організована область пам’яті, де зберігаються примітивні змінні та посилання на об’єкти (адреси пам’яті), локальні для методів.
  2. Куча: це більша динамічна область пам’яті, де розміщуються фактичні об’єкти (за допомогою ключового слова new).

Коли ми оголошуємо Dog myDog = new Dog("Fido", 3);:

  • Посилання myDog створюється в Стеку.
  • Фактичний об'єкт Dog з його даними створюється в Кучі.
  • Змінна myDog вказує на розташування об’єкта в Кучі.

Спробуйте самі

вправи#java.m2.l1.e1
Спроби: 0Завантаження…

Завершіть клас Person, додавши назву поля та відповідний конструктор. Потім у основному методі створіть об’єкт Person з іменем p з іменем Alice.

Завантаження редактора…
Показати підказку

Напишіть `String name;` всередині класу, оголосите конструктор `public Person(String name) { this.name = name; }` і створіть його за допомогою `new Person('Alice')`.

Рішення доступне після 3 спроб

вправи#java.m2.l1.e2
Спроби: 0Завантаження…

Створіть клас Book із полями title (String) і pages (int), повним конструктором, і створіть у методі main екземпляр книги під назвою b із назвою Moby Dick і 600 сторінками.

Завантаження редактора…
Показати підказку

Не забудьте визначити обидва поля в Книзі, зіставити їх у конструкторі за допомогою `this.title = title;` і `this.pages = pages;`, а також використати `new Book('Moby Dick', 600)`.

Рішення доступне після 3 спроб

вправи#java.m2.l1.e3
Спроби: 0Завантаження…

Створіть клас Product із полями name (String) і price (double) і конструктором, який ініціалізує обидва поля. У основному методі створіть об’єкт Product з назвою p із назвою Laptop і ціною 999,99.

Завантаження редактора…
Показати підказку

Оголошіть поля `String name;` і `double price;` у Product, призначте їх у конструкторі за допомогою `this.name = name;` і `this.price = price;` і, нарешті, створіть об’єкт у основному методі.

Рішення доступне після 3 спроб