Ответ
Да, можно. Поле, объявленное с модификатором 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гарантирует неизменность ссылки, но не состояния самого объекта (если он изменяемый).