Это соглашение, унаследованное от мира C / C ++, что константы имеют все прописные буквы . Поскольку в Java ближайшим эквивалентом константы является static final
, эти члены часто называются аналогично.
В этом случае различие может быть не таким важным, поскольку объекты регистратора семантически не являются константами . Тем не менее, все равно рекомендуется объявить их static
, чтобы убедиться, что у вас есть один экземпляр для каждого класса, и вы можете объявить их final
, чтобы гарантировать, что ссылка на объект не может быть изменена позже (и для передачи это факт читателям вашего кода).
Обновление комментария @ Moncader:
static
эквивалентен C ++ (класс) static
- точно так же, как бессмысленно в C ++ объявлять ваши константы как нестатические, в Java также нет смысла.
final
- это , а не прямой эквивалент C ++ const
. Это означает, что указанная ссылка не может быть изменена. Тем не менее, это не мешает менять указанный объект! Таким образом, он работает только как const, если он защищает примитивное значение (например, int
) или ссылку на неизменный объект (например, String
). Чтобы остаться в нашей текущей теме, рассмотрим
private static final Logger logger = LoggerFactory.getLogger (Main.class);
...
logger.setLevel (Level.INFO);
logger.addAppender (...);
logger.setAdditivity (ложь);
Все эти вызовы явно меняют состояние регистратора, даже если он объявлен final
. Это то, что я имел в виду выше, говоря, что объекты логгера семантически не являются константами.