2011-07-12 27 views
2

我有一個靜態初始化塊。它將日誌記錄設置爲文件。如果出現問題,我只是想擺脫靜態塊。這可能嗎?我知道我可以使用if/else方法,但使用簡單的中斷會使代碼更具可讀性。Java中的靜態初始化塊的打破

+0

這會讓您的課程處於不一致/無法使用的狀態嗎? –

+0

是的,會的。這是一個日誌記錄類。因此,如果失敗,它仍然可以將日誌輸出寫入控制檯,但日誌記錄將不可用。 – user489041

+1

我得到的是,如果您的課程處於不可用狀態,它可能無法通過類加載器(或沿着這些線)加載,導致各種問題。只要記住,* all *'static final'變量應該被初始化,無論... –

回答

3

你可能想捕獲所有異常:

static { 
    try { 
     // Initialization 
    } 
    catch (Exception exception) { 
     // Not much can be done here 
    } 
} 

但要注意:在加載該類不會失敗,但全部或部分靜態字段可能是不一致的狀態。

0

try/catch怎麼樣?

try{}catch(){} 
1

這是你在找什麼?

label: 
{ 
    // blah blah 
    break label; 
} 
+0

你能打破一個低於break語句的標籤嗎? – user489041

+0

你是什麼意思? –

+0

標籤必須位於塊的起始位置,要破壞的位置位於塊的末尾。 –

0
  • 如果它是一個例外,使用嘗試{拋出新的異常();}趕上
  • ,如果它是正常處理,可使用如果 - 則 - 否則開關
    最終你可以使用標籤,但恕我直言這是一個非常不好的風格:

    //boolean condition; 
    static { 
    label: 
    { 
        System.out.println("1"); 
        if(condition) break label; 
        System.out.println("2"); 
    } 
    } 
    
+0

請不要使用HTML代碼標籤。只需縮進你的代碼(在列表中4個空格或8個),代碼將很好地顯示出來。 –

4

你的靜態塊可以調用的方法

static { init(); } 

private static void init() { 
    // do something 
    if(test) return; 
    // do something 
} 
0

在我看來,一個靜態塊未在流量控制戰略而言使用任何其他塊不同。如果你發現它更具可讀性,你可以在任何地方使用BREAK(也可以在你的靜態塊中),但是一般的假設是它使得代碼的可讀性更差,而IFELSE方法更好。