9

Initializing blocks in java ; と呼ばれるものがあることをいくつかの記事で読みました。クラスがロードされるか、インスタンスが作成されるときに、いくつかの初期化割り当てを実行できます。

メソッドとコンストラクターとは別に、初期化ブロックは Java プログラムで操作を実行できる 3 番目の場所です。

class InitDemo
{
     static int y;
     int x;
 {
   y = 10;
   x =  0;
 }
}

C++ にそのようなパラダイムがあるかどうかを尋ねています。ありがとうございました。

4

2 に答える 2

5

Java には 2 つの異なる形式の初期化ブロックがあることを指摘する必要があります。{...}キーワードのないむき出しのブロックstaticは、ちょっとしたコンパイラーの入れ替わりです。ブロック内のテキストは、定義されているコンストラクターの前に追加されます。別のコード セグメントは生成されません。static {...一方、 で始まるブロックは、静的な初期化ブロックであり、それ自体が (半) 適切な手順です (驚くことではありませんが、「静的」と名付けられています)。

ブロックは、staticクラスがロードされた直後に (いくつかの注意事項がありますが) 1 回だけ実行されます。非静的初期化子は、コンストラクターが実行されるたびに (コンストラクターにコピーされるため) 実行されるため、通常、静的初期化には適していません。

于 2012-05-09T18:20:23.823 に答える
2

簡単に言えば、C++ には、この Java 構造に直接相当するものはありません。

同様の動作を得るには、 のコンストラクターを設定xしてyからInitDemo作成する必要があります (これは Java でも実行できます)。

于 2012-05-09T16:39:19.603 に答える