2011-11-10 6 views

答えて

5

これは、あなたのクラスは、これは静的な初期化ブロックと呼ばれ、このクラスがロードされたときに、一度に実行されるクラスローダ

+0

おかげジョシ。実際には、私はこのコードをC++に翻訳したいと思います。どうすればいいのか説明できますか? –

+1

@sufyansiddique:あなたは新しい質問を思いつくべきです。 –

+0

クラスがロードされたときに実行されるC++には何がありますか?単にコードブロックを置くだけです。 –

1

によってロードされたときに呼び出されますコードのブロックです。

5

これはスタティックイニシャライザブロックです。あなたはどのメソッドの外でもクラスのボディでそれを見つけたに違いありません。スタティックなinitブロックは、クラスロード時にクラスごとに1回だけ実行されます。

16

これは静的初期化ブロックです。それをコンストラクタの静的なバージョンと考えてください。コンストラクターはクラスのインスタンス化時に実行されます。静的初期化ブロックは、クラスがロードされると実行されます。

あなたは(明らかにコードを作製した)このような何かのためにそれらを使用することができます。

private static int myInt; 

static { 
    MyResource myResource = new MyResource(); 
    myInt = myResource.getIntegerValue(); 
    myResource.close(); 
} 

Oracle's tutorial on initializing fieldsの「静的初期化ブロック」を参照してください。

+0

ありがとうジョナサン。 –

1

Sufyanは、

静的初期化子が継承されていないとクラスがロードされ、JREによって初期化されるときに一度だけ実行されます。つまり、このクラスから作成したオブジェクトの数に関係なく、この静的ブロックは1回だけ初期化されます。

私はそれの大ファンではなく、状況に応じてより良い選択肢があると確信しています。

おかげで、 レッズ

1

この構文は、Java 7のよう時代遅れされてきた今と同等です:

public static void main(String[] args) { 
    /* 
     stuff 
    */ 
} 
関連する問題