Перейти к основному содержимому
Модуль 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 и именем Алиса.

Загрузка редактора…
Показать подсказку

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

Решение доступно после 3 попыток

Упражнение#java.m2.l1.e2
Попыток: 0Загрузка…

Создайте класс Book с полями заголовок (String) и страницы (int), полный конструктор и создайте в основном методе экземпляр книги с именем b с названием «Моби Дик» и 600 страницами.

Загрузка редактора…
Показать подсказку

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

Решение доступно после 3 попыток

Упражнение#java.m2.l1.e3
Попыток: 0Загрузка…

Создайте класс Product с именем полей (String) и ценой (double), а также конструктор, который инициализирует оба поля. В основном методе создайте объект Product с именем p с именем Ноутбук и ценой 999,99.

Загрузка редактора…
Показать подсказку

Объявите поля `String name;` и `double Price;` в Product, назначьте их в конструкторе с `this.name = name;` и `this.price = Price;` и, наконец, создайте объект в основном методе.

Решение доступно после 3 попыток