20

次のようなコードをコンパイルする理由について疑問に思っています。

class MyClass extends AnotherClass {
  {
    MySecondClass object = new MySecondClass();
    object.doSomething();
  }
}

このコードとコンストラクターのコードの違いは何ですか? このコードは、オブジェクトの作成前に実行されます。

4

3 に答える 3

3

これはコンストラクターの前に実行されるインスタンスの初期化ブロックです。なぜコンストラクターの代わりに使用するのでしょうか? 答えはノーです。

次のようなコードをコンパイルする理由について疑問に思っています。

通常、コンストラクターのオーバーロードを使用するときに共通コードを除外するために使用します。したがって、上記の「the」は、実際には、共通インスタンス初期化コード ブロックの実行後にオブジェクトのインスタンス化で呼び出される、オーバーロードされたコンストラクターの 1 つを参照しています。

ちなみに、あるコンストラクターを別のコンストラクターから呼び出すことで同じことを達成できる場合もありますが、その場合、呼び出し元のコンストラクター内の最初の行に呼び出しを行う必要があります。そうしないと、コードがコンパイルされません。

于 2013-06-08T15:47:02.203 に答える