2020年8月16日 java中靜態程式碼塊,非靜態程式碼塊,建構函式之間的執行順序(筆試題)
阿新 • • 發佈:2020-08-16
它們之間的執行順序為:靜態程式碼塊—>非靜態程式碼塊—>構造方法。
靜態程式碼塊只在第一次載入類的時候執行一次,之後不再執行;而非靜態程式碼塊和建構函式都是在每new一次就執行一次,只不過非靜態程式碼塊在建構函式之前執行而已。
如果存在子類,則載入順序為先父類後子類。
看如下的程式碼:
package day11; class Test{ public static void main(String[] args) { System.out.println("....主方法開始...."); new ClassB(); System.out.println("************"); new ClassB(); System.out.println("....主方法結束...."); } } class ClassA { public ClassA() { System.out.println("父類建構函式"); } { System.out.println("父類非靜態程式碼塊1"); } { System.out.println("父類非靜態程式碼塊2"); } static { System.out.println("父類靜態程式碼塊 1"); } static { System.out.println("父類靜態程式碼塊 2"); } } class ClassB extends ClassA { public ClassB() { System.out.println("子類建構函式"); } { System.out.println("子類非靜態程式碼塊2"); } { System.out.println("子類非靜態程式碼塊1"); } static{ System.out.println("子類靜態程式碼塊 2"); } static { System.out.println("子類靜態程式碼塊 1"); } }
執行結果:
....主方法開始....
父類靜態程式碼塊 1
父類靜態程式碼塊 2
子類靜態程式碼塊 2
子類靜態程式碼塊 1
父類非靜態程式碼塊1
父類非靜態程式碼塊2
父類建構函式
子類非靜態程式碼塊2
子類非靜態程式碼塊1
子類建構函式
************
父類非靜態程式碼塊1
父類非靜態程式碼塊2
父類建構函式
子類非靜態程式碼塊2
子類非靜態程式碼塊1
子類建構函式
....主方法結束....