そのため、最近 Java のスキルを磨いていて、以前は知らなかった機能をいくつか発見しました。静的およびインスタンス初期化子は、そのような 2 つの手法です。
私の質問は、コンストラクターにコードを含める代わりに、いつイニシャライザーを使用するのですか? 私はいくつかの明白な可能性を考えました:
静的/インスタンス初期化子を使用して、「最終的な」静的/インスタンス変数の値を設定できますが、コンストラクターはできません
静的初期化子を使用して、クラス内の任意の静的変数の値を設定できます。これは、各コンストラクターの先頭に「if (someStaticVar == null) // do stuff」コード ブロックを配置するよりも効率的です。
これらのケースは両方とも、これらの変数を設定するために必要なコードが単純な「var = value」よりも複雑であると想定しています。そうでない場合、変数を宣言するときに単に値を設定する代わりに初期化子を使用する理由がないように思われます。
ただし、これらは些細な利点 (特に最終変数を設定する機能) ではありませんが、初期化子を使用する必要がある状況はかなり限られているようです。
確かに、コンストラクターで行われる多くのことに対して初期化子を使用できますが、そうする理由は本当にわかりません。クラスのすべてのコンストラクターが大量のコードを共有している場合でも、プライベートな initialize() 関数を使用する方が、初期化子を使用するよりも理にかなっているように思えます。コンストラクタ。
何か不足していますか?イニシャライザを使用する必要がある状況は他にもたくさんありますか? それとも、非常に特定の状況で使用するためのかなり限定的なツールですか?