我已经很清楚实例初始化器不能引发异常,因为它是对象初始化的一部分,并且开发人员无法控制此过程。 This post有相同的想法。
但是,我已经阅读了Bill Venners的一篇有关Java中的对象初始化的文章,并且引用了以下一段:
实例初始化器中的代码可能不会返回。除非使用匿名内部类,否则实例初始化器仅在类中每个构造函数的throws子句中显式声明了检查的异常时,才可以引发检查的异常。另一方面,匿名内部类中的实例初始化器可以引发任何异常。
请单击here以获取原始帖子。
似乎可以说实例初始化器会抛出异常。如果我的理解不正确,这里的任何人都可以向我解释一下或纠正我。
最佳答案
实例初始化器可以引发检查的异常,但是如果这样做,则类构造函数必须声明它们。例如,此代码是合法的:
import java.io.*;
public class MyClass {
PrintStream stream;
{
stream = new PrintStream("/tmp/file.txt");
}
public MyClass() throws FileNotFoundException {
}
}
但是,如果从构造函数中省略了
throws
子句,或者如果添加了另一个也没有该子句的构造函数,则该子句将无法编译,因为PrintStream
构造函数会抛出FileNotFoundException
。