1. 程式人生 > 實用技巧 >2020年8月16日 java中靜態程式碼塊,非靜態程式碼塊,建構函式之間的執行順序(筆試題)

2020年8月16日 java中靜態程式碼塊,非靜態程式碼塊,建構函式之間的執行順序(筆試題)

它們之間的執行順序為:靜態程式碼塊—>非靜態程式碼塊—>構造方法。

靜態程式碼塊只在第一次載入類的時候執行一次,之後不再執行;而非靜態程式碼塊和建構函式都是在每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
子類建構函式
....主方法結束....