gpt4 book ai didi

java - 为什么在 Java 7 中可以捕获 IOException,即使永远不会抛出 IOException

转载 作者:搜寻专家 更新时间:2023-11-01 01:21:15 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com