Уроки модуля (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 и именем Алиса.
Показать подсказку
Напишите `String name;` внутри класса, объявите конструктор `public Person(String name) { this.name = name; }` и создайте его экземпляр с помощью `new Person('Alice')`.
Решение доступно после 3 попыток
Создайте класс Book с полями заголовок (String) и страницы (int), полный конструктор и создайте в основном методе экземпляр книги с именем b с названием «Моби Дик» и 600 страницами.
Показать подсказку
Не забудьте определить оба поля в Book, сопоставить их в конструкторе с помощью `this.title = title;` и `this.pages =pages;` и использовать `new Book('Moby Dick', 600)`.
Решение доступно после 3 попыток
Создайте класс Product с именем полей (String) и ценой (double), а также конструктор, который инициализирует оба поля. В основном методе создайте объект Product с именем p с именем Ноутбук и ценой 999,99.
Показать подсказку
Объявите поля `String name;` и `double Price;` в Product, назначьте их в конструкторе с `this.name = name;` и `this.price = Price;` и, наконец, создайте объект в основном методе.
Решение доступно после 3 попыток