public class SampleCloseable implements AutoCloseable {
private String name;
public SampleCloseable(String name){
this.name = name;
}
@Override
public void close() throws Exception {
System.out.println("closing: " + this.name);
}
}
和主类
public class Main{
public static void main(String args[]) {
try(SampleCloseable sampleCloseable = new SampleCloseable("test1")){
System.out.println("im in a try block");
} catch (IOException e) {
System.out.println("IOException is never thrown");
} catch (Exception e) {
} finally{
System.out.println("finally");
}
}
}
但是当我在 SampleCloseable 中删除 close() 方法上的抛出异常时 我收到一个编译器错误,指出 IOException 从未在相应的 try block 中抛出。
最佳答案
因为您抛出了一个通用异常。由于 IOException 继承自 Exception,因此它可能会被 close() 方法抛出。调用者不知道它实际上并没有被抛出。它只看到表明它可以的方法签名。
事实上,close() 方法可以自由抛出任何类型的异常。当然,这是不好的做法,您应该指定要抛出的具体异常。
关于java - 为什么在 Java 7 中可以捕获 IOException,即使永远不会抛出 IOException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27586237/