1. 程式人生 > >程式碼塊執行順序

程式碼塊執行順序

程式碼塊

public class Hello {
	public static void main(String[] args) {
		new B();
		new B();
		new B();
	}
}

class A {
	static {
		System.out.println("父類A靜態塊");
	}

	{
		System.out.println("父類A構造塊");
	}

	public A() {
		System.out.println("父類A構造方法");
	}
}

class B extends A {
	static {
		System.out.println
("子類B靜態塊"); } { System.out.println("子類B構造塊"); } public B() { System.out.println("子類B構造方法"); } }

輸出結果

父類A靜態塊
子類B靜態塊
父類A構造塊
父類A構造方法
子類B構造塊
子類B構造方法
父類A構造塊
父類A構造方法
子類B構造塊
子類B構造方法
父類A構造塊
父類A構造方法
子類B構造塊
子類B構造方法

總結

  • 靜態塊,構造塊,構造方法的執行順序都是父類優先
  • 靜態塊優先構造塊,構造塊優先於構造方法
  • 靜態塊無論多少個例項,都只執行一次,靜態塊絕對優先,父類子類靜態塊執行完,再執行父類的構造塊
  • 父類執行完構造塊構造方法,再執行子類的構造塊構造方法