![](/img/trans.png)
[英]Why close method of java.lang.AutoCloseable throws Exception, but close method of java.io.Closeable throws IOException?
[英]java.io.Closeable: why throwing RuntimeException in close() works?
我不知道为什么这些代码在 Java 7 上编译:
class Lamb implements Closeable{
@Override
public void close(){
throw new RuntimeException();
}
}
Closeable 中的 close() 方法抛出 IOException。 覆盖方法时,“throws”声明必须保持不变或使用子类。 现在,RuntimeException 是“运行时”,因此不需要声明(我进入这一部分)但它继承自 Exception 而不是 IOException! 你不能扩大范围,对吧?
“throws”声明必须保持不变或使用子类。
这不是真的。 正确的是throws
子句必须相同或更严格。 更严格的要么意味着抛出更严格的Exception
类型(即子类),要么不声明它可以抛出异常。 不能抛出异常比能够抛出异常更具限制性。
我还应该指出,即使这个方法在它的throws
子句中没有隐含地throws IOException
,即使它这样做了,也不会与throw new RuntimeException();
发生冲突throw new RuntimeException();
. 任何方法都可以抛出RuntimeException
的子类(即未经检查的异常),无论throws
之后写什么。
RuntimeException
是否继承自IOException
没有任何区别,因为RuntimeException
不参与异常检查,正如您在问题中已经承认的那样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.