Ответ 1
Просто final
будет иметь ожидаемый эффект.
Объявление static делает его переменной класса, к нему можно получить доступ через имя класса <ClassName>.x
Возможный дубликат:
закрытый окончательный атрибут static vs private final attribute
Какая разница между объявлением переменной как
static final int x = 5;
или
final int x = 5;
Если я хочу, чтобы переменная была локальной, а константа (не может быть изменена позже)?
Спасибо
Просто final
будет иметь ожидаемый эффект.
Объявление static делает его переменной класса, к нему можно получить доступ через имя класса <ClassName>.x
Объявление поля как "final" гарантирует, что поле является константой и не может измениться. Разница заключается в использовании ключевого слова static.
Объявление поля как статического означает, что оно связано с типом, а не с экземплярами. то есть только одна копия поля будет присутствовать для всех объектов, а не отдельной копии для каждого объекта. Из-за этого к статическим полям можно получить доступ через имя класса.
Как вы можете видеть, ваше требование, чтобы поле было постоянным, достигается в обоих случаях (объявляя поле "final" и "final final" ).
Аналогичный вопрос: закрытый окончательный атрибут static vs private final attribute
Надеюсь, что это поможет
В первом утверждении вы определяете переменную, которая является общей для всех объектов (статическое поле класса).
Во втором утверждении вы определяете переменную, которая принадлежит каждому созданному объекту (много копий).
В вашем случае вы должны использовать первый.
Для примитивных типов "final static" будет правильным объявлением для объявления константы. Нестатическая конечная переменная имеет смысл, когда она является постоянной ссылкой на объект. В этом случае каждый экземпляр может содержать свою собственную ссылку, как показано в JLS 4.5.4.
См. ответ Павла для правильного ответа.