這是沒有必要爲一個壓倒一切的方法來重新申報所有Exception
S按超類方法拋出。只需要它不會聲明Exception
s被拋出,不是由超類方法拋出的。
的JLS第8.4.8.3闡述:
更確切地說,假設B是一個類或接口,和A是 超類或B的超接口,和方法聲明n的乙 覆蓋或隱藏A.方法聲明米然後:
如果n具有拋出提及任何檢查的異常類型子句, m必須有一個throws子句,或發生編譯時間錯誤。
對於每一個檢查中所列出的異常類型拋出的n子句, 同一異常類或它的超類型必須發生在 擦除中的一個(§4.6)的拋出的米條款;否則,發生編譯時 錯誤。
如果未擦除拋出的米子句中不包含的 的超類型每種類型的異常在拋出N,編譯時發生 未經檢查的警告的子句。
這很有道理。爲什麼應該子類方法可能會拋出相同的Exception
s作爲它覆蓋的超類方法?這是有道理的,它不申報其他例外,因爲這會破壞這樣的場景:
public class Super
{
public void method() throws FooException {}
}
public class Sub extends Super {
{
public void method() throws FooException, BarException {}
}
然後使用變得模糊:
Super sup = new Sub();
try {
sup.method();
}
// But the subclass could (if it were allowed here)
// throw BarException!
catch (FooException e) {}
確保將'@ Override'註釋添加到'test.doFileStuff()'。 –
nope。如果你不會扔它 - 你可以跳過它。但是您不允許添加其他已檢查的異常。 – Admit
[未經檢查的異常 - 爭議](http://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html) – Husam