2016-03-30 71 views
1

標題可能不容易理解,但基本上我已經看到了這一點在一些程序中,我很好奇它,清除事情我簡化了代碼,以在某種程度上我們可以專注於我的問題。混淆與關鍵字靜態與括號在一個類

public class A { 

    public A() { 
     System.out.println("constructor"); 
    } 
    static{ 
     System.out.println("static"); 
    } 
} 

-

public class B { 

    public static void main(String[] args) { 

     A a = new A(); 
    } 

} 

當我運行代碼的輸出是:

靜態

構造

究竟是什麼這個靜態W¯¯第i個括號?從外觀看來,它似乎是在使用類時運行括號內的代碼,但爲什麼存在如果我們有構造函數?我們不能把我們需要在構造函數裏面初始化的代碼放進去嗎?並且它似乎在構造函數之前運行它的代碼,因爲static這個詞在構造函數之前出現,爲什麼這樣呢?

+0

它被稱爲靜態初始化程序,它在您運行應用程序時運行。你甚至不需要它的一個實例。它與創建ENUM實例的範圍相同(在此之後運行)。 – EpicPandaForce

回答

0

它是靜態初始化塊,檢查here

public class Test{ 
    public Test(){ 
     // constructor initialization 
    } 

    static{ 
     // static initializer 
    } 

    { 
     // instance initializer 
    } 

} 

初始化順序是靜態初始化,實例初始化,構造函數初始化。

+0

謝謝所以我期待的術語是靜態初始化塊幫助文檔,謝謝 – securenai