JavaRush /Курсы /JAVA 25 SELF /Создание объектов с помощью new

Создание объектов с помощью new

JAVA 25 SELF
14 уровень, 3 лекция
Открыта

1. Ключевое слово new

В Java, чтобы создать объект любого класса, используется ключевое слово new. Это «магическое» слово просит JVM: выдели память под новый объект и вызови для него конструктор.

Аналогия:
Если класс — это чертёж автомобиля, то new — это завод, который по этому чертежу собирает реальную машину.

Пример

Person vasya = new Person();

Что здесь происходит:

  1. new Person() — создаётся новый объект типа Person (вызывается конструктор).
  2. 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

Если нужны два независимых объекта — создавайте их отдельно!

1
Задача
JAVA 25 SELF, 14 уровень, 3 лекция
Недоступна
Ваш первый виртуальный питомец
Ваш первый виртуальный питомец
1
Задача
JAVA 25 SELF, 14 уровень, 3 лекция
Недоступна
Прибытие нового жителя в цифровой приют
Прибытие нового жителя в цифровой приют
1
Задача
JAVA 25 SELF, 14 уровень, 3 лекция
Недоступна
Расставляем машины на виртуальной витрине
Расставляем машины на виртуальной витрине
1
Задача
JAVA 25 SELF, 14 уровень, 3 лекция
Недоступна
Учёт книг в библиотеке: новые поступления
Учёт книг в библиотеке: новые поступления
Комментарии (11)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Ivan Kulazhenkov Уровень 19
30 июля 2026
Про геттеры и сеттеры нам еще не рассказывали, а уже надо использовать 🤨
rwnmei Уровень 47
17 августа 2026
Да нет вроде не надо использовать там гетеры и сетеры просто по своей логике создаешь метод который нужен по условию
Timofey Novitsky Уровень 36
11 мая 2026
В зачаче с питомцем старнная фигня с тем что мы пишем по сути внутри класса Dog. Сбивает с толку. Непонятно зачем.
nightmarakesh Уровень 1
6 июля 2026
через идейку выносите в другой класс, а метод main помещаете в класс Main. Здесь они косякнули чуть
Marat Safiianov Уровень 9
14 апреля 2026
Alt + Ins -> Constructor
Cherepoq Уровень 26
28 февраля 2026
"Реализуйте два "способа регистрации" книги (конструктора): первый, без каких-либо начальных данных, который будет по умолчанию называть книгу "Без названия" и указывать 0 страниц; второй, более полный, который будет принимать название и количество страниц сразу." В условиях задачи ни слова про приватность переменных, зато на тестах это узнаем. Классика
Sdsadasd Уровень 1
5 января 2026
Всегда интересно наблюдать за тем как число решённых задач падает с каждой лекцией
Алексей Уровень 22
2 февраля 2026
а мне на уровень, думаешь будет сложнее, а тут бац сложите 2+2
Gans Electro Уровень 42
14 июня 2026
Не будьте как этот человек 👆, сами пишут и сами отваливаются😂
24 декабря 2025
Ksanders Уровень 32
20 октября 2025
Задачи этой лекции кажутся абсолютно однообразными, вообще не нужно напрягаться. Было би интресней, если бы была задача повышенного уровня сложности.