Модульні уроки (1/2)
Класи та об'єкти
Java — це мова, орієнтована на об’єктно-орієнтоване програмування (ООП). В ООП ми моделюємо реальний світ за допомогою об’єктів. Об’єкт має стан (дані) і поведінку (дії).
Класи та об'єкти
- Клас: це проект (або шаблон), який визначає властивості та поведінку типу об’єкта.
- Об’єкт: це конкретний екземпляр, створений з класу.
Наприклад, якщо Car є класом, ваш автомобіль у гаражі є фактичним об’єктом.
Поля екземплярів і конструктори
Дані всередині класу називаються полями екземплярів (або атрибутами). Для ініціалізації стану об’єкта в момент його створення ми використовуємо спеціальний метод, який називається конструктором.
Конструктор має те саме ім’я, що й клас і не має типу повернення (навіть void).
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, за яким слідує конструктор класу:
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 посилається на поточний об’єкт, на якому виконується конструктор або метод. Він в основному використовується для уникнення неоднозначності, коли параметри конструктора мають те саме ім’я, що й поля екземпляра об’єкта (затінення змінної):
class User {
String username;
public User(String username) {
this.username = username; // this.username is the instance field, username is the parameter
}
}Розподіл пам'яті: стек проти купи
Важливо розуміти, як Java розподіляє пам'ять:
- Стек: це швидка та організована область пам’яті, де зберігаються примітивні змінні та посилання на об’єкти (адреси пам’яті), локальні для методів.
- Куча: це більша динамічна область пам’яті, де розміщуються фактичні об’єкти (за допомогою ключового слова
new).
Коли ми оголошуємо Dog myDog = new Dog("Fido", 3);:
- Посилання
myDogстворюється в Стеку. - Фактичний об'єкт
Dogз його даними створюється в Кучі. - Змінна
myDogвказує на розташування об’єкта в Кучі.
Спробуйте самі
Завершіть клас Person, додавши назву поля та відповідний конструктор. Потім у основному методі створіть об’єкт Person з іменем p з іменем Alice.
Показати підказку
Напишіть `String name;` всередині класу, оголосите конструктор `public Person(String name) { this.name = name; }` і створіть його за допомогою `new Person('Alice')`.
Рішення доступне після 3 спроб
Створіть клас Book із полями title (String) і pages (int), повним конструктором, і створіть у методі main екземпляр книги під назвою b із назвою Moby Dick і 600 сторінками.
Показати підказку
Не забудьте визначити обидва поля в Книзі, зіставити їх у конструкторі за допомогою `this.title = title;` і `this.pages = pages;`, а також використати `new Book('Moby Dick', 600)`.
Рішення доступне після 3 спроб
Створіть клас Product із полями name (String) і price (double) і конструктором, який ініціалізує обидва поля. У основному методі створіть об’єкт Product з назвою p із назвою Laptop і ціною 999,99.
Показати підказку
Оголошіть поля `String name;` і `double price;` у Product, призначте їх у конструкторі за допомогою `this.name = name;` і `this.price = price;` і, нарешті, створіть об’єкт у основному методі.
Рішення доступне після 3 спроб