try/catch/finally中没有catch会发生什么?

age*_*154 4 java exception

看一个我在中期测试中出错的问题,我想知道:

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();
  }
}
Run Code Online (Sandbox Code Playgroud)

这会将所有异常传递回链中,还是仅传递已检查的IOException?

Isa*_*aac 5

finally块将被执行,然后最初抛出的异常(即,由此引发的第一个异常readData(in))将渗透.

我想这个问题中的警告是关于将被渗透的异常类型.这可能是一个IOException或任何类型的未经检查的异常(即,java.lang.RuntimeException或的子类java.lang.Error).

根据@ zapl的评论编辑:如果finally块抛出IOException(作为结果inputFile.close()),该异常将被渗透到调用者,无论该try块是否抛出异常.

  • 如果`finally`块抛出另一个`Exception` [> example](http://ideone.com/tzMCUG),则可以覆盖原来的`Exception`. (2认同)