簡體   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