Использование инициализаторов и конструкторов в Java

Так что в последнее время я совершенствовался в своих навыках Java и обнаружил несколько функций, о которых раньше не знал. Статические инициализаторы и инициализаторы являются двумя такими методами.

Мой вопрос: когда использовать инициализатор вместо включения кода в конструктор? Я подумал о нескольких очевидных возможностях:

Статические / экземпляры инициализаторов могут быть использованы для установки значения «окончательных» статических / переменных экземпляра, тогда как конструктор не может

статические инициализаторы могут использоваться для установки значения любых статических переменных в классе, что должно быть более эффективным, чем наличие блока кода «if (someStaticVar == null) // do stuff» в начале каждого конструктора

В обоих этих случаях предполагается, что код, необходимый для установки этих переменных, является более сложным, чем просто «var = value», так как в противном случае не было бы никакой причины использовать инициализатор вместо простой установки значения при объявлении переменной.

Однако, хотя это не тривиальные выгоды (особенно возможность установить конечную переменную), кажется, что существует довольно ограниченное количество ситуаций, в которых следует использовать инициализатор.

Конечно, можно использовать инициализатор для большей части того, что делается в конструкторе, но я не вижу причины для этого. Даже если все конструкторы класса совместно используют большой объем кода, использование закрытой функции initialize () представляется мне более целесообразным, чем использование инициализатора, поскольку он не блокирует выполнение этого кода при написании нового конструктор.

Я что-то пропустил? Есть ли ряд других ситуаций, в которых следует использовать инициализатор? Или это действительно довольно ограниченный инструмент для использования в очень специфических ситуациях?

Ответы на вопрос(9)

Ваш ответ на вопрос