1

コード例は次のとおりです。

class A {

   static {
       int a;
       class B {
       }
   }

   public static void main(String[] args){
       // cannot access class B and in a;
   }
}

staticこの文脈でのキーワードの意味がわかりません。int変数とその中にクラスを宣言します。しかし、クラスA内またはメインメソッドでは使用できません。コンパイルしましたが、エラーは発生しません。ですから、この種の宣言には何らかの目的があると思います。

4

6 に答える 6

2

静的 {} ブロック内のコードは、クラス (このクラスのオブジェクトではない) が初めて読み込まれたときに実行されます。 これを見る

于 2012-09-06T19:48:41.050 に答える
1

これは、Javaでは静的ブロックと呼ばれます。これは通常、クラスAが必要とする可能性のある初期化の目的で使用されます

静的ブロックは、JVMがこのクラスをロードするときに実行されます。そのようなブロックは多数存在する可能性があり、出現順に実行されます。

于 2012-09-06T19:46:19.580 に答える
1

これは静的初期化ブロックです。Oracle Java SE ドキュメントの static initialization blocksは次のとおりです。

あなたの例でint aは、静的初期化ブロックへのローカル変数です。これは、静的初期化ブロックのローカル変数に関する別の Stackoverflow の投稿です。 Java の静的ブロック内で宣言された変数のスコープは何ですか? . そのため、メイン メソッドでアクセスすることはできません。

于 2012-09-06T19:49:30.437 に答える
0

これは静的初期化ブロックです。

ブロックの外でintaと classBにアクセスできないのは、スコープによるものです。コンストラクターやメソッドと同様に、初期化ブロックのスコープ内で宣言された変数は、ブロックの外部からアクセスできません。

于 2012-09-06T19:54:30.500 に答える