2012-05-09 9 views
8

いくつかの記事では、Javaでブロックを初期化することがあります。クラスがロードされるか、インスタンスが作成されるときに、いくつかの初期化代入を実行できます。C++にJava初期化ブロックのような構造体がありますか?

初期化ブロックは、操作を実行できるJavaプログラムの3番目の場所です。

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

C++でこのようなparadigmeがある場合、私は求めていますか? ありがとうございます。

+0

Cにはクラスが「読み込まれている」という概念はなく、静的なビューはJavaとはまったく異なります。したがって、静的イニシャライザ以外には何も似ていません。 –

+1

(本質的には、Javaの 'static'ブロックはクラスが(半)完全なオブジェクトなので、クラスのコンストラクタです。)C++クラスはオブジェクトではありません。 –

+0

情報ありがとうございました。 –

答えて

4

Javaには2つの異なる形式の初期化ブロックがあることを指摘する必要があります。キーワードstaticを除いた裸の{...}ブロックは、ちょっとしたコンパイラの動きに過ぎません。ブロック内のテキストは、定義されているコンストラクタの前に追加され、別のコードセグメントは生成されません。一方、static {...を開始するブロックは、静的な初期化ブロックであり、独自の権利(静的ではない)という(半)適切なプロシージャです。

ブロックは、クラスがロードされた直後に(わずかな注意を払って)一度だけ実行されます。非静的イニシャライザは、コンストラクタが実行されるたびに実行されるため(コンストラクタにコピーされているため)、一般に静的initにとっては不適切です。

2

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

同様の動作をさせるには、とyInitDemoのコンストラクタ(Javaでも実行できます)から設定する必要があります。

+0

確かにaixは、javaとは対照的にコンストラクタがC++の代入を初期化するための唯一の場所です。 –

+0

@ Blood-HaZaRd:かなり。 Javaでは、(非静的な)初期化ブロックは、すべてのコンストラクタに共通のコードを配置する単なる方法です。 – NPE

+0

はい、それに、静的なintilizingブロックと静的でない2つの味があります。 –

関連する問題