Что выполняется раньше в Java: конструктор или сеттер (setter) метода?

«Что выполняется раньше в Java: конструктор или сеттер (setter) метода?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Конструктор всегда выполняется раньше любого сеттера.

Последовательность при создании объекта:

  1. Выделение памяти под объект.
  2. Вызов конструктора: Инициализация полей (в том числе через параметры конструктора или прямое присваивание). Конструктор создает объект в валидном начальном состоянии.
  3. Вызов сеттера: Происходит после создания объекта, когда нужно изменить значение поля. Сеттер — это обычный публичный метод для модификации состояния существующего объекта.

Пример:

public class Person {
    private String name;

    // 1. Конструктор выполняется при создании объекта
    public Person(String initialName) {
        this.name = initialName; // Прямая инициализация
        System.out.println("Constructor sets name to: " + this.name);
    }

    // 2. Сеттер может быть вызван много раз после создания
    public void setName(String newName) {
        this.name = newName;
        System.out.println("Setter changes name to: " + this.name);
    }
}

// Использование:
Person person = new Person("Alice"); // Вывод: Constructor sets name to: Alice
person.setName("Bob");               // Вывод: Setter changes name to: Bob

Практическое правило: Конструктор задает начальное состояние, сеттеры управляют изменением состояния объекта в течение его жизни.