实例初始值设定项可以抛出异常吗?

时间:2011-12-02 06:37:20

标签: java

我已经非常清楚实例初始化器不能抛出异常,因为它是对象初始化的一部分,并且开发人员无法控制此过程。 This post也有同样的想法。

但是,我已经阅读了Bill Venners关于java中对象初始化的文章,并引用了一个段落如下:

  

实例初始值设定项中的代码可能无法返回。除了匿名内部类的情况之外,只有在类中每个构造函数的throws子句中显式声明了已检查的异常时,实例初始值设定项才可以抛出已检查的异常。另一方面,匿名内部类中的实例初始值设定项可以抛出任何异常。   请点击here获取原始帖子。

似乎说实例初始值设定项可以抛出异常。如果我的理解不正确,有人可以在这里向我解释或纠正我。

1 个答案:

答案 0 :(得分:2)

实例初始值设定项可以抛出已检查的异常,但如果有,则类构造函数必须声明它们。例如,此代码是合法的:

import java.io.*;

public class MyClass {

    PrintStream stream;

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

    public MyClass() throws FileNotFoundException {
    }

}

但是,如果构造函数中省略了throws子句,或者添加了另一个没有该子句的构造函数,则无法编译,因为PrintStream构造函数抛出{{ 1}}。