Итак, в последнее время я совершенствовался в своих навыках Java и обнаружил несколько функций, о которых раньше не знал. Статические инициализаторы и инициализаторы являются двумя такими методами.
Мой вопрос: когда использовать инициализатор вместо включения кода в конструктор? Я подумал о паре очевидных возможностей:
Инициализаторы статического / экземпляра можно использовать для установки значения «окончательных» статических / экземпляровых переменных, тогда как конструктор не может
статические инициализаторы могут использоваться для установки значения любых статических переменных в классе, что должно быть более эффективным, чем наличие блока кода "if (someStaticVar == null) // do stuff" в начале каждого конструктора
В обоих этих случаях предполагается, что код, требуемый для установки этих переменных, является более сложным, чем просто «var = value», так как в противном случае не было бы никакой причины использовать инициализатор вместо простой установки значения при объявлении переменная.
Однако, хотя это не тривиальные выгоды (особенно возможность установить конечную переменную), похоже, что существует довольно ограниченное количество ситуаций, в которых следует использовать инициализатор.
Можно, конечно, использовать инициализатор для большей части того, что делается в конструкторе, но я действительно не вижу причины для этого. Даже если все конструкторы класса совместно используют большой объем кода, использование закрытой функции initialize () представляется мне более целесообразным, чем использование инициализатора, поскольку он не блокирует выполнение этого кода при написании нового конструктор.
Я что-то упустил? Есть ли ряд других ситуаций, в которых следует использовать инициализатор? Или это действительно довольно ограниченный инструмент для использования в очень специфических ситуациях?