2

「Javaコンパイラは初期化ブロックをすべてのコンストラクタにコピーします。したがって、このアプローチを使用して、複数のコンストラクタ間でコードのブロックを共有できます。」

このチュートリアルでこれを読みました: http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html

  1. 理解できません。初期化ブロックがあり、コンストラクターの作業を行う場合、つまりコンストラクターの代わりとして機能する場合、コンストラクターの必要性は何ですか?

  2. ああ、インスタンスを作成するときにコンストラクターを呼び出す必要があります。わかった!しかし、その後、初期化ブロックの必要性は何ですか?

  3. 「したがって、このアプローチを使用して、複数のコンストラクター間でコードのブロックを共有できます。」誰かが私に例を教えてもらえますか? わからないというか。

前もって感謝します。

4

2 に答える 2

0

イニシャライザ ブロックの唯一の実際の必要性は、変数staticのより複雑な初期化を実行できるバリアントです。static final

コンストラクターと初期化ブロックの違いは、コンストラクターがオブジェクトを構築し、初期化ブロックがすべてのコンストラクターにコピーされるという事実にあります。コンストラクターを指定しない場合 (初期化ブロックを指定した場合でも)、コンパイラーはオブジェクトの構築を処理するデフォルトのコンストラクターを生成します。

さまざまなコンストラクターでさまざまなコードを実行できますが、呼び出されたコンストラクターに関係なく、すべての初期化子ブロックが実行されます。もちろんprivate、初期化ブロックと同じメソッドを記述してコードを読みやすくすることもできますが、初期化ブロックとは異なり、コンストラクターから手動で呼び出す必要があります。

于 2013-10-29T11:29:08.110 に答える