2011-07-28 40 views
5

什麼是一個類定義體內聲明Java語法問題

static{ 
    //something 
} 

是什麼意思?

public class A extends B{ 
    static { 
      C.register(new C(A.class, 
        (byte) D.x.getCode()) { 
         public DataSerializable newInstance() { 
           return new A(); 
         } 
        } 
       ); 
    } 
} 

回答

6

static塊稱爲「靜態初始化塊」。它與常規構造函數非常相似,只是它只能初始化靜態變量。

我發現它在一些靜態變量的初始化可能會拋出一個您希望處理的異常或至少記錄時很有用。它在靜態最終變量的初始化中特別有用。

您可以在此處詳細瞭解靜態初始化塊:Initializing Fields

3

它儘快類加載器加載類執行的代碼塊,而不需要這個類的一個實例,即。

+0

@Jack的答案加上你會作出最好的回答。 – Marcelo

1

這是一個靜態初始值設定項。它允許您在創建任何實例之前指定在加載類時發生的事情。

如果從靜態初始值設定項引發異常,這是非常令人困惑的,很難說明它來自哪裏。你在靜態初始化器中做的任何事情都應該有一個try-catch,並且有異常記錄。如果可以的話,這是一種很好的語言功能。

2

這是一個靜態初始化器。它在類加載後運行,結果可以存儲在靜態成員中。它用於初始化需要比常規新Xyz()更多的靜態成員...(如列表或地圖)...

1

這意味着您將具有此部分,該部分位於靜態塊內部,進入JVM。

執行下面的簡單程序可能會使事情更清晰

public class Test123 { 
    static{ 
    System.out.println("Hello from static block"); 
    } 

    public static void main(String[] args) { 
    System.out.println("In main"); 
    } 
} 

輸出上面會

Hello from static block 
In main