1

私は Java 言語を使用していくつかの実験を行うことができ、驚くべきことに、このコード行を使用することにしました{{ }}。さらに、そのコード構造を使用していることに気づきました。オブジェクト変数を作成せずに、クラスの任意のメソッドを使用できます。

例えば:

class Sample {
   public void hello() {
      // Do something here.
   }
}
class SampleTest {
   public void testHello() {
      new Sample {{ hello(); }};
   }
   // PSVM ...
}

問題は、8行目のステートメントで呼ばれる概念/用語は何ですか?

4

1 に答える 1

7

最初の中括弧は新しい AnonymousInnerClass を作成し、2 番目の中括弧は匿名内部クラスがインスタンス化されるときに実行されるインスタンス初期化子ブロックを宣言します。このタイプのイニシャライザ ブロックは、クラスのインスタンス スコープ内で宣言されるため、正式には「インスタンス イニシャライザ」と呼ばれます。「静的イニシャライザ」は、キーワード static がブロックを開始するブレースの前に配置される関連概念です。これは、クラスローダがクラスのロードを完了するとすぐにクラス レベルで実行されます ( http://docs.oracle.com/javase/specs/jls/se5.0/html/classes.html#8.6で指定)。) 初期化子ブロックは、含まれるスコープで使用可能な任意のメソッド、フィールド、および最終変数を使用できますが、初期化子がコンストラクターの前に実行されるという事実に注意する必要があります (ただし、スーパークラス コンストラクターの前ではありません)。

いくつかの例が必要な場合は、http: //c2.com/cgi/wiki ?DoubleBraceInitialization を参照してください。

サラジョグ

于 2013-09-09T06:27:02.143 に答える