最近被一個面試題難住了,看來之前對JAVA的執行順序欠了解。以為原面試題代碼:

public class Example { public static void main(String[] args) { HelloB bb = new HelloB(); } } class HelloA { public HelloA() { System.out.println("HelloA"); } { System.out.println("I'm A class"); } static { System.out.println("static A"); } } class HelloB extends HelloA { public HelloB() { System.out.println("HelloB"); } { System.out.println("I'm B class"); } static { System.out.println("static B"); } public static void main(String[] args) { new HelloB(); } }
執行結果是:
static A
static B
I'm A class
HelloA
I'm B class
HelloB
得出以下總結:
1. 當調用JAVA子類的無參構造函數時,雖然子類無參構造函數沒有顯式調用其父類的無參構造函數,但是Java會自動調用其父類的無參構造器 (注:有參構造函數需要顯式調用)
2. JAVA的執行順序是:父類靜態變量-> 父類靜態塊 -> 子類靜態變量 -> 子類靜態塊 -> 父類成員變量 -> 父類構造塊 -> 父類構造函數 -> 子類成員變量 -> 子類構造塊 -> 子類構造函數