問題タブ [initialization-block]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java での初期化子とコンストラクターの使用
そのため、最近 Java のスキルを磨いていて、以前は知らなかった機能をいくつか発見しました。静的およびインスタンス初期化子は、そのような 2 つの手法です。
私の質問は、コンストラクターにコードを含める代わりに、いつイニシャライザーを使用するのですか? 私はいくつかの明白な可能性を考えました:
静的/インスタンス初期化子を使用して、「最終的な」静的/インスタンス変数の値を設定できますが、コンストラクターはできません
静的初期化子を使用して、クラス内の任意の静的変数の値を設定できます。これは、各コンストラクターの先頭に「if (someStaticVar == null) // do stuff」コード ブロックを配置するよりも効率的です。
これらのケースは両方とも、これらの変数を設定するために必要なコードが単純な「var = value」よりも複雑であると想定しています。そうでない場合、変数を宣言するときに単に値を設定する代わりに初期化子を使用する理由がないように思われます。
ただし、これらは些細な利点 (特に最終変数を設定する機能) ではありませんが、初期化子を使用する必要がある状況はかなり限られているようです。
確かに、コンストラクターで行われる多くのことに対して初期化子を使用できますが、そうする理由は本当にわかりません。クラスのすべてのコンストラクターが大量のコードを共有している場合でも、プライベートな initialize() 関数を使用する方が、初期化子を使用するよりも理にかなっているように思えます。コンストラクタ。
何か不足していますか?イニシャライザを使用する必要がある状況は他にもたくさんありますか? それとも、非常に特定の状況で使用するためのかなり限定的なツールですか?
java - 静的初期化ブロック
私が理解している限り、「静的初期化ブロック」は、1行で実行できない場合に静的フィールドの値を設定するために使用されます。
しかし、そのために特別なブロックが必要な理由がわかりません。たとえば、フィールドを静的 (値の割り当てなし) として宣言します。次に、上記で宣言された静的フィールドに値を生成して割り当てるコードを数行記述します。
のような特別なブロックでこの行が必要なのはなぜstatic {...}
ですか?
java - 初期化ブロックとは何ですか?
コードをコンストラクター、メソッド、または初期化ブロックに入れることができます。初期化ブロックの用途は何ですか? すべてのJavaプログラムがそれを持っている必要がありますか?
java - Javaの静的ブロックと初期化ブロック?
重複の可能性:
静的初期化ブロック
次のコードを検討してください。
最初に静的ブロックが実行され、次に空のブロックが実行されることを理解しています。しかし、問題は、空のブロックの実際の有用性を理解できなかったことです。誰もが実際の例を示すことができますか?
- 静的ブロックと空のブロックの両方が使用されています
- 静的ブロックと空のブロックの両方に異なるユーティリティがあります
java - Java インスタンス初期化ブロックとインスタンス変数
前の質問Java クラスと静的ブロックに関連して、コードを静的ブロックと変数から通常のインスタンス初期化ブロックとインスタンス変数に変更したらどうなるでしょうか。コードはどのように実行されるのでしょうか。
ここでは、158 として出力されます。ここで理由を理解できません。他のコードは次のとおりです。
ここでの出力は 20 です。これは、オブジェクトが作成されたときにインスタンス ブロックが最初に実行されるためです。しかし、最初のコードの出力が 158 になるのはなぜですか?
java - 変数の初期化を初期化ブロックに入れると、宣言前に初期化できるのはなぜですか?
次のコードを検討してください。
宣言されていない変数を初期化しようとすると、明らかにコンパイルされません。
ただし、ステートメントを初期化ブロックに入れると、正常にコンパイルされます。
この宣言前の初期化を有効にする初期化ブロックのこの「機能」は何ですか?
質問をする前に、SO の初期化ブロックに関するいくつかの投稿を読みましたが、それらは主に初期化の順序に関する問題 (静的と非静的など) に対処しているようです。
kotlin - kotlinのinitブロックとコンストラクタの違いは何ですか?
Kotlinの学習を開始しました。init
ブロックとブロックの違いを教えてconstructor
ください。これと、これを使用して改善する方法の違いは何ですか?