2012-05-25 230 views
7

我遇到延伸異常類:爲什麼擴展Exception類?

public class MyException extends Exception 
{ 
    public MyException() 
    { 
     super(); 
    } 

    public MyException(final String argMessage, final Throwable argCause) 
    { 
     super(argMessage, argCause); 
    } 

    public MyException(final String argMessage) 
    { 
     super(argMessage); 
    } 

    public MyException(final Throwable argCause) 
    { 
     super(argCause); 
    } 


} 

豈不是毫無意義的extening例外這種方式,因爲所有的重載構造函數都只是打電話超類異常?

+0

可能的重複[在Java中的子類異常:何時不是自定義消息「足夠好」?](http://stackoverflow.com/questions/9366425/subclassing-exception -in-Java時,心不是-A-自定義消息足夠好) –

回答

8

不,這不是毫無意義的。你可以通過catch這個特定的例外來處理它,而不是捕獲一般的Exception,這可能在所有情況下都不能處理。

有了這個,你可以這樣做:

try { 
    foo(); 
} catch (MyException e) { 
    handleMyException(e); 
} 

,如果你不知道如何處理一般Exception,但你可以處理MyException更好這是不可能的。

這也是提高可讀性 - 這是更好地聲明一個方法throws MyException(與通常是更好的名稱),然後throws Exception - 你知道什麼可以走這條路錯誤的要好得多。

5

是的,這是有原因的。它允許您區分您的例外類型。

想這下面的代碼:

try { 
    // some instructions 
} catch (MyFirstException firstException) { 
    // Handler for the first exception 
} catch (MySecondException secondException) { 
    // Handler for the first exception 
} catch (Exception exception) { 
    // Handler for all other exceptions 
} 

事件,如果從異常的MyFirstExceptionMySecondException繼承並覆蓋所有的方法,你可以在catch塊區分它們。所以,對於這兩個例外,你都可以有不同的處理程序。

0

當你總是做一個catch (Exception e)你實際上會捕獲每一個子類的Exception,這個具體也適用於RuntimeException,你通常不想去捕捉它。這隻能通過捕獲更糟糕Throwable

相關問題