靜態程式碼塊、程式碼塊、構造器、main方法的執行順序
阿新 • • 發佈:2019-02-04
java物件的初始化順序
(1)類載入之後,按從上到下(從父類到子類)執行被static修飾的語句;
(2)當static語句執行完之後,再執行main方法;
(3)如果有語句new了自身的物件,將從上到下執行構造程式碼塊、構造器(兩者可以說繫結在一起)。
看程式碼:
public class TestStaticF { public TestStaticF(){ System.out.println("這裡是構造器F"); } { System.out.println("這裡是程式碼塊F"); } static{ System.out.println("這裡是靜態程式碼塊F"); } }
public class TestStatic extends TestStaticF{ public TestStatic(){ System.out.println("這裡是構造器"); } { System.out.println("這裡是程式碼塊"); } static{ System.out.println("這裡是靜態程式碼塊"); } public static void main(String[] args){ System.out.println("開始執行main方法"); TestStatic ts=new TestStatic(); } }
輸出:
這裡是靜態程式碼塊F
這裡是靜態程式碼塊
開始執行main方法
這裡是程式碼塊F
這裡是構造器F
這裡是程式碼塊
這裡是構造器
結論:由此可見靜態塊的載入是在main方法前執行的,先執行程式碼塊後執行構造方法,有父類到子類。
注意:子類的程式碼塊並不優先於父類的構造。