Java初期化(一)


最近JAVAの基礎を復習して、Javaの初期化を学んで、総括して以下の通りです.
JAvaクラスのロードポイント:1:静的メンバー変数は1回のみロードされます.2:静的メンバーはローカル変数ではありません.3:クラスは内部メンバーをロードしてから構築方法を実行します.
4:静的内部メンバーをロードしてから、静的でない内部メンバーをロードします.
 
Dogというクラスがあると仮定して、オブジェクトの作成プロセスをまとめます.
1:new Dogのときjavaインタプリタはクラスパスを検索し、Dog.classファイルを検索します.
2:Dog.classファイルをロードし、Classオブジェクトを作成し、すべての静的初期化を実行します(1回のみ実行).
3:new Dogsオブジェクトを作成し、Dogオブジェクトにスタックに十分なメモリを割り当てます.
4:このストレージスペースはクリアされ、Dogオブジェクトのすべての基本タイプが自動的にデフォルト値に設定され、参照がnullに設定されます.
5:フィールド定義に表示されるすべての初期化アクションを実行します.
6:コンストラクタを実行します.
 
次は試験コードです.
import static com.study.Print.print;

class Bowl{
	Bowl(int marker){
		print("Bowl("+marker+")");
	}
	void f1(int marker){
		print("f1("+marker+")");
	}
}

class Table {
	static Bowl bowl1 = new Bowl(1);
	Table(){
		print("Table()");
		bowl2.f1(1);
	}
	void f2(int marker){
		print("f2("+marker+")");
	}
	static Bowl bowl2 = new Bowl(2);
}
class Cupboard{
	Bowl bowl3 =  new Bowl(3);
	static Bowl bowl4 = new Bowl(4);
	Cupboard(){
		print("Cupboard()");
		bowl4.f1(2);
	}
	void f3(int marker){
		print("f3("+marker+")");
	}
	static Bowl bowl5 = new Bowl(5);
}
public class StaticInitialzation {
	public static void main(String[] args) {
		print("Create new Cupboard() in main");
		new Cupboard();
		print("create new cupboard in main");
		new Cupboard();
		table.f2(1);
		cupboard.f3(1);
	}
	
	static Table table = new Table();
	static Cupboard cupboard = new Cupboard();
}

/**  
 *     StaticInitialzation ,          。
 *     Table Cupboard。
 *   Table,    bowl1 bowl2,    Table     Table(),    bowl2 f1  。
 *   Cupboard。       bowl4 bowl5,        bowl3,      ,  bowl4   。
 *     main  。
 *       Cupboard  。       Bowl3,       Bowl4 5,        。
 *   table f2(1)   cupload f3  。
 * 
 *                    StaticInitialzation
 *                Table            Cupboard
 *   bowl1 bowl2 Table() f1(1)   Bowl(4) Bowl(5) Bowl(3) Cupboard() f1(2)
Bowl(1)
Bowl(2)
Table()
f1(1)
Bowl(4)
Bowl(5)
Bowl(3)
Cupboard()
f1(2)
Create new Cupboard() in main
Bowl(3)
Cupboard()
f1(2)
create new cupboard in main
Bowl(3)
Cupboard()
f1(2)
f2(1)
f3(1)
 */