根据JLS:如果命名类的实例变量初始化程序或实例初始值设定项可以抛出一个已检查的异常类,那么这是一个编译时错误,除非在每个构造函数的throws子句中显式声明了该异常类或其一个超类.它的类和类至少有一个显式声明的构造函数.
所以,如果我这样做 -
class A{
{
throw new FileNotFoundException();
}
public A() throws IOException{
// TODO Auto-generated constructor stub
}
}
Run Code Online (Sandbox Code Playgroud)
这给出了编译时错误"初始化程序必须正常完成"
而
class A{
{
File f=new File("a");
FileOutputStream fo=new FileOutputStream(f);
fo.write(3);
}
public A() throws IOException{
// TODO Auto-generated constructor stub
}
}
Run Code Online (Sandbox Code Playgroud)
此代码不显示任何编译时错误.即使我在构造函数中声明了throws子句,为什么前面的代码不能编译?
java ×1