私はJavaから2つのコードを持っています:
class Test1 {
index = 1;
int index;
}
対
class Test2 {
{ index = 1; }
int index;
}
最初のものはコンパイル時に失敗しました、それはメンバー「インデックス」が定義される前に使用されているためだと思いますか?2つ目はエラーがありません。理由がわかりません。少し時間を割いて私を助けてくれませんか?どうもありがとう!
2 番目のコードに存在する { ... } 内部構造はいわゆる初期化ブロックであるため、2 番目のコードはコンパイルされます。このブロックは、Java コンパイラによって各コンストラクタにコピーされます。
また、他のクラス メソッドと同様に、そのクラスで定義されたプロパティを使用できます。このプロパティが正確に定義されている場所 (このブロックの上または前) は問題ではありません。
最初のものは、基本的に7つの許可されたものを定義するクラス本体とメンバー宣言の言語仕様に単に適合しないため、コンパイルされません。
class Test2 {
{ index = 1; }
int index;
}
上記のコード{ index = 1; }
では として知られています。これは、クラスの静的変数の場合と同様に、クラスのインスタンス変数Instance initializer block
を初期化するために使用されます。 static initializer block
Java Compiler
このブロックを everyにコピーし constructor
、すべてのコンストラクターがこのコード ブロックを簡単に共有できるようにします......
そのため、クラス内の の配置 (つまり、前または後) に関係なく、引き続きアクセスできます。instance variable
Instance initializer block
このリンクを参照してください:
http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html
test2は、Initiallizerを使用するためにコンパイルされます。これは、コンストラクターを呼び出す前にinitiallizerが呼び出されるためにコンパイルされます。