初期化されたインスタンス

2290 ワード


 : main() static ,static 


class Bowl1 {
	Bowl1(int marker) {
		System.out.println("Bowl(" + marker + ")");
	}
	void f1(int marker) {
		System.out.println("f1(" +marker + ")");
	}
}

class Table1 {
	static Bowl1 bow1 = new Bowl1(1);
	Table1() {
		System.out.println("Table1()");
		bowl2.f1(1);
	}
	void f2(int marker) {
		System.out.println("f2(" + marker + ")");
	}
	static Bowl1 bowl2 = new Bowl1(2);
}

class Cupboard1 {
	Bowl1 bowl3 = new Bowl1(3);
	static Bowl1 bowl4=new Bowl1(4);
	Cupboard1() {
		System.out.println("Cupboard1()");
		bowl4.f1(2);
	}
	void f3(int marker) {
		System.out.println("f3(" + marker + ")");
	}
	static Bowl1 bowl5 = new Bowl1(5);
}
public class StaticInitialzation {
	public static void main(String[] args){
		System.out.println("Creating new CupBoard1() in main");
		new Cupboard1();
		System.out.println("Creating new CupBoard1() in main");
		new Cupboard1();
		table.f2(1);
		Cupboard.f3(1);
	}
	static Table1 table = new Table1();
	static Cupboard1 Cupboard = new Cupboard1();
}


結果:
Bowl(1)
Bowl(2)
Table1()
f1(1)
Bowl(4)
Bowl(5)
Bowl(3)
Cupboard1()
f1(2)
Creating new CupBoard1() in main
Bowl(3)
Cupboard1()
f1(2)
Creating new CupBoard1() in main
Bowl(3)
Cupboard1()
f1(2)
f2(1)
f3(1)

class B1 {

	void f(){
		System.out.println(1);
	}
}

class A1 {
	static B1 b;
	static {
		 b=new B1();
	}
	
	A1(){
		System.out.print("a");
	}
}
public class StaticInitialzation {
	public static void main(String args[]) {
	A1.b.f();
		
	}
}

静的初期化は、必要に応じてのみ行われます(すべてのクラスの静的変数または静的ブロックが自動的に初期化されるわけではありません):
1.第1参照クラスのstatic変数の場合、すべてのstatic変数とstaticブロックが初期化され、クラス自体は初期化されない(A 1は初期化されていない)
2.クラスの作成(B 1)