Java中static塊、構造塊、構造函數的執行順序


最近被一個面試題難住了,看來之前對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();
    }
}
View Code

執行結果是:

static A
static B
I'm A class
HelloA
I'm B class
HelloB

得出以下總結:
1. 當調用JAVA子類的無參構造函數時,雖然子類無參構造函數沒有顯式調用其父類的無參構造函數,但是Java會自動調用其父類的無參構造器 (注:有參構造函數需要顯式調用)
2. JAVA的執行順序是:父類靜態變量-> 父類靜態塊 -> 子類靜態變量 -> 子類靜態塊 -> 父類成員變量 -> 父類構造塊 -> 父類構造函數 -> 子類成員變量 -> 子類構造塊 -> 子類構造函數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM