看一个我在中期测试中出错的问题,我想知道:
public double[] readInputFile(String fielane) throws IOException
{
File inputFile = new File(filename);
Scanner in = new Scanner(inputFile);
try
{
readData(in);
return data;
}
finally
{
inputFile.close();
}
}
这会将所有异常传递回链中,还是仅传递已检查的IOException?
答案 0 :(得分:5)
将执行finally
块,然后最初抛出的异常(即由readData(in)
引发的第一个异常)将渗透。
我认为这个问题的警告是关于将要渗透的异常类型。这可以是IOException
,也可以是任何类型的未经检查的异常(即java.lang.RuntimeException
或java.lang.Error
的子类。)
已编辑:如果finally
块引发IOException
(由于inputFile.close()
),该异常将被渗透到调用者,无论try
块是否引发异常。
答案 1 :(得分:1)
finally
块中的代码将始终执行,与上述try
块内是否发生异常无关。
在您的示例中,finally
块确保关闭输入文件;因此,即使抛出异常,也能保证连接不会保持打开状态。
答案 2 :(得分:1)
这会将所有异常传递回链中,还是仅传递已检查的IOException?
它将传递所有异常,但是应该声明编译readData
的代码只能抛出IOException
或其子类。
finally
块将在try
块之后执行,就像往常一样。