根據JLS:如果已命名類的實例變量初始值設定項或實例初始值設定項可以拋出已檢查的異常類,則會出現編譯時錯誤,除非顯式聲明該異常類或其某個超類在它的類的每個構造函數的throws子句中,並且該類至少有一個顯式聲明的構造函數。檢查異常和初始化塊
所以,如果我這樣做 -
class A{
{
throw new FileNotFoundException();
}
public A() throws IOException{
// TODO Auto-generated constructor stub
}
}
這給出了一個編譯時錯誤「初始化必須正常完成」
而
class A{
{
File f=new File("a");
FileOutputStream fo=new FileOutputStream(f);
fo.write(3);
}
public A() throws IOException{
// TODO Auto-generated constructor stub
}
}
這段代碼並不顯示任何編譯時錯誤。爲什麼前面的代碼沒有編譯,即使我已經在構造函數中聲明瞭throws子句?
你告訴初始化塊拋出無條件異常,你還期望什麼? – skuntsel 2013-02-23 15:40:23