实例初始值设定项是否可以引发异常?
问题描述:
我一直很清楚,实例初始化程序不能抛出异常,因为它是对象初始化的一部分,开发人员无法控制此过程。 This post有相同的想法。实例初始值设定项是否可以引发异常?
不过,我看过比尔关于Java中的对象初始化的文章,并有一款报价如下:
一个实例初始化可能不会返回中的代码。除了匿名内部类的情况外,只有在类中每个构造函数的throws子句中明确声明了checked异常的情况下,实例初始化程序才会抛出checked异常。另一方面,匿名内部类中的实例初始化器可以抛出任何异常。 请点击here查看原文。
它似乎说实例初始值设定项可以抛出异常。任何人都可以在这里向我解释这一点,或者如果我的理解不正确,请纠正我。
答
实例初始值设定项可以抛出检查异常,但如果他们这样做,则类构造函数必须声明它们。例如,下面的代码是合法的:
import java.io.*;
public class MyClass {
PrintStream stream;
{
stream = new PrintStream("/tmp/file.txt");
}
public MyClass() throws FileNotFoundException {
}
}
然而,如果该throws
条款是从构造中省略,或者再加入构造函数,也没有这不会编译的条款,因为PrintStream
构造函数抛出FileNotFoundException
。
与您的答案一起,实例初始值设定项可以在不受类构造函数限制的情况下抛出未经检查的异常。 – emory
谢谢,我明白了。 – Hong