根据JLS:如果已命名类的实例变量初始值设定项或实例初始值设定项可以抛出已检查的异常类,则会出现编译时错误,除非显式声明该异常类或其某个超类在它的类的每个构造函数的throws子句中,并且该类至少有一个显式声明的构造函数。检查异常和初始化块
所以,如果我这样做 -
class A{
{
throw new FileNotFoundException();
}
public A() throws IOException{
// TODO Auto-generated constructor stub
}
}
这给出了一个编译时错误“初始化必须正常完成”
而
class A{
{
File f=new File("a");
FileOutputStream fo=new FileOutputStream(f);
fo.write(3);
}
public A() throws IOException{
// TODO Auto-generated constructor stub
}
}
这段代码并不显示任何编译时错误。为什么前面的代码没有编译,即使我已经在构造函数中声明了throws子句?
你告诉初始化块抛出无条件异常,你还期望什么? – skuntsel 2013-02-23 15:40:23