@My1Name

Как работает static final?

Если в классе объявлено поле static final инициализированное в static блоке, это поле будет одно (singleton) в пределах программы, или для каждого экземпляра класса будет создаваться новый объект в памяти?
  • Вопрос задан
  • 168 просмотров
Решения вопроса 1
xez
@xez Куратор тега Java
TL Junior Roo
Одно на все приложение.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@rPman
static по определению, без каких либо final и прочего, это поле класса а не экземпляра, сколько бы ты экземпляров объекта не создал, переменная будет одна и та же. Ты можешь (будешь) обращаться к этой переменной даже не имея экземпляра, т.е. ClassName.static_member_name, но конечно синтаксически ты можешь обращаться к статическому члену и через экземпляр объекта object_variable.static_member_name.

final делает эту переменную - константой, т.е. мало того что эта переменная для класса будет в одном экземпляре, она не может быть изменена, а значит компилятор ее может оптимизировать до буквально ее отсутствия (например скалярные типы легко могут подставляться по мере использования в коде)
Ответ написан
Комментировать
@cyBEERkotleta
Добавлю, что final - не совсем синоним константе, так как значения констант известны ещё до компиляции. Это прямые значения, например, 3, 10, 15.5, "строка". final же переменная может содержать в себе и разные объекты. А также суть final-переменной в том, что ей можно задать значение только один раз. То есть можно как сразу записать в поле:
public static final int value = 10;
Так и записать просто вот это:
public static final int value;
А значение задать уже в конструкторе. Значение задаётся один раз, да, но не при объявлении поля, а в конструкторе. С константами так нельзя.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
03 мая 2024, в 01:20
200 руб./за проект
03 мая 2024, в 00:45
1000 руб./за проект