1. 程式人生 > >Java代碼執行順序

Java代碼執行順序

system lob copy println sed view 以及 pub -m

下面程序的運行結果是什麽()

技術分享
class HelloA {

    public HelloA() {
        System.out.println("HelloA");
    }
    
    { System.out.println("I‘m A class"); }
    
    static { System.out.println("static A"); }

}

public 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)類加載之後,按從上到下(從父類到子類)執行被static修飾的語句;(2)當static語句執行完之後,再執行main方法;(3)如果有語句new了自身的對象,將從上到下執行構造代碼塊、構造器(兩者可以說綁定在一起)。

下面稍微修改下上面的代碼,以便更清晰的說明情況:

技術分享 View Code

此時輸出結果為:

技術分享
static A
static B
-------main start-------
I‘m A class
HelloA
I‘m B class
HelloB
I‘m A class
HelloA
I‘m B class
HelloB
-------main end-------

Java代碼執行順序