Ответ
Ключевое слово final делает сущность неизменяемой и применяется в трёх основных контекстах:
1. Класс (final class)
Запрещает наследование от этого класса. Часто используется для обеспечения неизменяемости или безопасности (например, String, Integer).
final class ImmutableCalculator {
// Невозможно создать подкласс
}
2. Метод (final method)
Запрещает переопределение метода в дочерних классах. Используется для фиксации поведения.
class Base {
public final void criticalOperation() {
// Логика, которую нельзя менять в наследниках
}
}
3. Переменная (final variable)
Делает ссылку неизменяемой после инициализации. Для примитивов — значение константно.
final int MAX_USERS = 100;
final List<String> log = new ArrayList<>();
// MAX_USERS = 200; // Ошибка компиляции
// log = new LinkedList<>(); // Ошибка: нельзя изменить ссылку
log.add("event"); // Допустимо: изменяется состояние объекта, а не ссылка
Важные нюансы:
finalдля объекта означает неизменность ссылки, а не состояния объекта.- Поля
finalдолжны быть инициализированы к концу конструктора. - Используется для создания констант, обеспечения потокобезопасности и явного проектирования API.