Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实例初始值设定项能否引发异常?_Java - Fatal编程技术网

Java 实例初始值设定项能否引发异常?

Java 实例初始值设定项能否引发异常?,java,Java,我已经非常清楚,实例初始值设定项不能抛出异常,因为它是对象初始化的一部分,开发人员无法控制这个过程。他有同样的想法 然而,我读过Bill Venners关于java中对象初始化的一篇文章,下面引用了一段: 实例初始值设定项中的代码可能不会返回。除了匿名内部类之外,只有在类中每个构造函数的throws子句中显式声明了检查的异常时,实例初始值设定项才能抛出检查的异常。另一方面,匿名内部类中的实例初始值设定项可以引发任何异常。 请点击查看原始帖子 似乎说实例初始值设定项可以抛出异常。如果我的理解不正确

我已经非常清楚,实例初始值设定项不能抛出异常,因为它是对象初始化的一部分,开发人员无法控制这个过程。他有同样的想法

然而,我读过Bill Venners关于java中对象初始化的一篇文章,下面引用了一段:

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


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

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

import java.io.*;

public class MyClass {

    PrintStream stream;

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

    public MyClass() throws FileNotFoundException {
    }

}

但是,如果构造函数中省略了
throws
子句,或者如果添加了另一个没有该子句的构造函数,则不会编译,因为
PrintStream
构造函数会抛出
FileNotFoundException

,并与您的答案一起执行,实例初始值设定项可以在没有类构造函数限制的情况下抛出未经检查的异常。