1. 程式人生 > >靜態程式碼塊、構造器、靜態方法在類中呼叫的先後順序關係

靜態程式碼塊、構造器、靜態方法在類中呼叫的先後順序關係

package test;


/*
 * 當一個類中,有靜態方法、靜態程式碼塊、構造方法時;
 * 如果 初始化該類,new一個物件,則會
 * 1,先呼叫靜態程式碼塊;
 * 2. 再呼叫構造器,初始化該物件;
 * 3.靜態方法需要被主動顯式呼叫;
 * 可通過以下簡單的呼叫程式碼得出結論;
 * 而且,static程式碼塊只會初始化一次,之後不管例項化多少物件,都不會再呼叫該static程式碼塊;
 * 而構造器依賴於物件而存在,new一個物件,則會呼叫依次構造器。
 * */
public class test_static_constrcutor {
	test_static_constrcutor()
	{
		System.out.println("constructor output");
	}
	static {
		System.out.println("static 靜態程式碼塊輸出");
	}
	
	static void method(){
		System.out.println("static 方法輸出");
	}
	
	public static void main(String[] args)
	{
		new test_static_constrcutor();
		System.out.println('\n');
		
		new test_static_constrcutor().method();
		System.out.println('\n');
		
		test_static_constrcutor t = new test_static_constrcutor();
		t.method();
		System.out.println('\n');
		
		//new test();
		System.out.println('\n');
		
		new test().method();;
	}
}

class test
{
	test()
	{
		System.out.println("test constructor output");
	}
	static {
		System.out.println(" test static 靜態程式碼塊輸出");
	}
	
	static void method(){
		System.out.println(" test static 方法輸出");
	}
}

執行結果如下: