繁体   English   中英

java.io.Closeable:为什么在 close() 中抛出 RuntimeException 有效?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM