final
Запрещает менять переменную после присваивания, переопределять метод или наследовать класс.
Доступно с: Java 1.0
Синтаксис
final Type name = value;Примеры
Константа — static final поле с именем заглавными буквами:
static final double VAT_RATE = 0.2;
void main() {
final int price = 100;
// price = 200; // error: cannot assign a value to final variable price
IO.println(price * (1 + VAT_RATE));
}Результат:
120.0final запрещает переприсвоить ссылку, но не менять сам объект:
void main() {
final List<String> names = new ArrayList<>();
names.add("Anna");
names.add("Oleg");
IO.println(names);
}Результат:
[Anna, Oleg]Примечания
У final три значения: у переменной — её нельзя переприсвоить, у метода — его нельзя переопределить в наследнике, у класса — от него нельзя наследоваться (так объявлен String).
Чтобы сам список нельзя было изменить, нужна неизменяемая коллекция, например List.of(...). Переменные, которые используются в лямбдах, должны быть final или «эффективно final» — не меняться после присваивания.
См. также
Вопросы и ответы по теме
В учебнике
- Переменные — Объявление переменных в Java: тип и имя, присваивание, var, константы final и правила именования.