Можно ли объявить поля класса как final в Java? Что это означает?

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

Ответ

Да, можно. Поле, объявленное с модификатором final, должно быть инициализировано один раз и не может быть переназначено.

public class Example {
    final int primitiveConstant = 42; // Примитив: значение неизменно
    final StringBuilder mutableReference = new StringBuilder(); // Объект: ссылка неизменна

    void demonstrate() {
        // primitiveConstant = 100; // Ошибка компиляции: нельзя изменить final-примитив
        // mutableReference = new StringBuilder(); // Ошибка: нельзя переназначить ссылку
        mutableReference.append("Hello"); // Допустимо: можно менять состояние объекта
    }
}

Важные правила:

  • Инициализация: Нестатическое final-поле должно быть инициализировано к моменту завершения работы каждого конструктора.
  • Статические константы: Часто используется комбинация static final для создания констант класса.
  • Для объектов: final гарантирует неизменность ссылки, но не состояния самого объекта (если он изменяемый).