我的Precise Rethrow
的文檔閱讀,http://www.theserverside.com/tutorial/OCPJP-Use-more-precise-rethrow-in-exceptions-Objective-Java-7對於最終重新拋出
基本上,你可以列出具體的例外在拋出你的方法的條款,即使他們沒有明確catch塊,如果處理:
try塊實際上在某個時間點拋出該特定異常。
特定異常尚未在任何點由前述catch塊
在命名的異常引發方法簽名的條款必須在至少一個異常的類層次結構被處理並重新拋出處理catch塊(亞型或超)
看一看代碼(注意上拋出的main
條款)
class OpenException extends Exception {}
class CloseException extends Exception {}
public class PRethrow
{
public static void main(String args[]) throws OpenException, CloseException, java.io.IOException
{
boolean flag = true;
try
{
if (flag)
{
throw new OpenException();
}
else
{
throw new CloseException();
}
}
catch (Exception e)
{
System.out.println(e.getMessage());
throw e;
}
}
}
在第一個條件中明確提到,you can list a specific exception in throws clause if the try block actually throws that specific exception at some point in time.
在我的代碼中,try塊永遠不會拋出java.io.IOException
,但仍將它包括在throws子句中不會產生錯誤。
你不會拋出IOException,這就是爲什麼它沒有被拋出。你需要拋出新的IOException();某處。 –
@SotiriosDelimanolis:http://www.theserverside.com/tutorial/OCPJP-Use-more-precise-rethrow-in-exceptions-Objective-Java-7 –
@PerryMonschau:這就是我所說的,我不是扔IOException,所以根據問題中提到的第一個條件,應該有錯誤 –