1. 程式人生 > >java靜態初始化塊、例項初始化塊

java靜態初始化塊、例項初始化塊

public class Demo1 {
	public Demo1() {
		System.out.println("父類構造器");
	}
	static{
		System.out.println("父類靜態初始化塊");
	}
	{
		System.out.println("父類例項初始化塊");
	}
	public void method() {
		System.out.println("父類方法");
	}
}
public class Demo2 extends Demo1{
	public Demo2() {
		System.out.println("子類構造器");
	}
	static {
		System.out.println("子類靜態初始化塊");
	}
	{
		System.out.println("子類例項初始化塊");
	}
	public static void main(String[] args) {
		new Demo2().method();
	}
}
輸出結果:

父類靜態初始化塊
子類靜態初始化塊
父類例項初始化塊
父類構造器
子類例項初始化塊
子類構造器
父類方法


由此可知:

1、當例項化子類的時候,先載入父類,靜態初始化塊在類載入的時候就被載入,因此先輸出:父類靜態初始化塊。

2、載入完父類時載入子類,接著輸出:子類靜態初始化塊。

3、繼續載入父類,輸出:父類例項化初始化塊。

4、載入父類的構造器,輸出:父類構造器。

5、載入子類,輸出:子類例項化快。

6、載入子類構造器,輸出:子類構造器。

7、呼叫父類的方法,輸出:父類方法。