2015-07-12 50 views
2

任何一個可以解釋我這個輸出是怎麼來優先在Java

class Class 
{  
    { 
     System.out.println("Instance Initializer block"); 
    } 

    Class() 
    { 
     System.out.println("Default Constructor"); 
    } 

    static 
    { 
     System.out.println("Static Block"); 
    } 

    public static void main(String[] Args) 
    { 
     new Class(); 
     System.out.println("Hello world"); 
    } 
} 

輸出:

Static Block 
Instance Initializer Block 
Default Constructor 
Hello World 

回答

4

靜態初始化塊首先執行,當類初始化,打印"Static Block"

創建實例(new Class())時,首先執行實例初始化程序塊(打印"Instance Initializer Block"),然後執行構造函數(打印"Default Constructor")。

最後執行println聲明的主要方法,打印"Hello World"

+0

如果我刪除從「實例初始化塊」大括號把它給我的錯誤 – Manish

+0

Sry基因生根粉逗號。 – Manish

+0

@Manish如果你刪除大括號,它不再是一個實例初始化塊。您不能擁有不屬於任何方法或構造函數或初始化程序塊的語句。 – Eran

1

的順序是,當你嘗試創建如下當JVM(類加載器)加載類(靜態塊稱爲實例創建無關)

    1. 靜態初始化塊正在跑實例 2.1 init塊被稱爲 2.2然後是構造函數。
    2. 最後的print語句