1. Ключевое слово new
В Java, чтобы создать объект любого класса, используется ключевое слово new. Это «магическое» слово просит JVM: выдели память под новый объект и вызови для него конструктор.
Аналогия:
Если класс — это чертёж автомобиля, то new — это завод, который по этому чертежу собирает реальную машину.
Пример
Person vasya = new Person();
Что здесь происходит:
- new Person() — создаётся новый объект типа Person (вызывается конструктор).
- 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
Если нужны два независимых объекта — создавайте их отдельно!
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ