キロ:
私たちはJavaでクラスをロードすると、最初の静的ブロックが実行され、その後、取得デフォルトコンストラクタ。しかし、コードの平和以下に、私がすることが観察されどのようなデフォルトコンストラクタは、静的ブロックの前に実行されるばかり。
public class Hello {
private static Hello hello = new Hello();
public Hello() {
System.out.println("Hello Default Constructor");
}
static {
System.out.println("Hello Static Block");
}
public static Hello createHelloInstance() {
return hello;
}
}
メインクラス:
public class MainTest {
public static void main(String a[])
{
Hello.createHelloInstance();
}
}
出力:
Hello Default Constructor
Hello Static Block
私はその背後にある基本的な概念を知っている必要があります。何がそう起こっています。?誰かの助けを借り、私はその背後の流れを理解することでした。
Mureinik:
あなたは、静的メンバ(持ちhello
で初期化された)new Hello()
デフォルトコンストラクタを呼び出しコールを。このメンバーが前に宣言されているのでstatic
ブロックは、最初に初期化されます。あなたがブロックした後、それを移動した場合、ブロックが最初に実行されます。
public class Hello {
static {
System.out.println("Hello Static Block");
}
private static Hello hello = new Hello();
// etc...
}
いっそ、ブロック内で初期化を移動することによって、順序を明示的に。
public class Hello {
private static Hello hello;
static {
System.out.println("Hello Static Block");
hello = new Hello();
}
// etc...
}