2011-12-02 61 views
3

我一直很清楚,實例初始化程序不能拋出異常,因爲它是對象初始化的一部分,開發人員無法控制此過程。 This post有相同的想法。實例初始值設定項是否可以引發異常?

不過,我看過比爾關於Java中的對象初始化的文章,並有一款報價如下:

一個實例初始化可能不會返回中的代碼。除了匿名內部類的情況外,只有在類中每個構造函數的throws子句中明確聲明瞭checked異常的情況下,實例初始化程序纔會拋出checked異常。另一方面,匿名內部類中的實例初始化器可以拋出任何異常。 請點擊here查看原文。

它似乎說實例初始值設定項可以拋出異常。任何人都可以在這裏向我解釋這一點,或者如果我的理解不正確,請糾正我。

回答

2

實例初始值設定項可以拋出檢查異常,但如果他們這樣做,則類構造函數必須聲明它們。例如,下面的代碼是合法的:

import java.io.*; 

public class MyClass { 

    PrintStream stream; 

    { 
     stream = new PrintStream("/tmp/file.txt"); 
    } 

    public MyClass() throws FileNotFoundException { 
    } 

} 

然而,如果該throws條款是從構造中省略,或者再加入構造函數,也沒有這不會編譯的條款,因爲PrintStream構造函數拋出FileNotFoundException

+1

與您的答案一起,實例初始值設定項可以在不受類構造函數限制的情況下拋出未經檢查的異常。 – emory

+0

謝謝,我明白了。 – Hong

相關問題