Java代碼執行順序


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

復制代碼
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-------


免責聲明!

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



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