2015-05-05 20 views
4

誰能請解釋爲什麼我們應該有像下面的構造函數時定義自定義異常:在java中爲什麼自定義異常也應與ARG作爲「Throwable的原因」構造

public MyException(Throwable cause) { 
    super(cause); 
} 

public MyException(String message, Throwable cause) { 
    super(message, cause); 
} 
+0

捕捉['Throwable'](https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html)包含子類['Error'](http:// docs.oracle.com/javase/8/docs/api/java/lang/Error.html)。 – Maroun

+0

這允許您鏈接例外。可能的重複:http://stackoverflow.com/questions/5800629/setting-exception-cause-in-java – codeMan

+0

有這樣的構造不是強制性的。您可以將MyException()作爲構造函數,也可以將MyException(String message)作爲構造函數。但是,最好有'Throwable' – Blip

回答

3

它允許您添加到您的自定義有關拋出該異常的原因的異常實例信息。

當你發現一個異常並拋出另一個異常時,它很有用。

例如:

try { 
    .... 
} 
catch (SomeException ex) { 
    throw new MyException ("some message", ex); 
} 
1

在你的問題中提到一個應該實現上述構造的MyException類是Exception一個子類,但它是不是絕對強制性有隻構造函數。

可以很好地具有不具備Throwable作爲參數的構造函數如下:

public MyException() { 
    super(); 
} 

public MyException(String message) { 
    super(message); 
} 

但這些構造有缺陷有關。考慮下面的代碼在MyClass類說假設:

public static void myMethod() throws MyException{ 
    //Some code 
} 

現在一些代碼在調用此myMethod(),如下所示:

try{ 
    MyClass.myMethod(); 
} catch (MyException e){ 
    e.getCause(); 
} 

如果您使用我的答案e.getCause()規定的構造函數的構造將返回null。所以很難確定什麼是異常的確切原因。

+0

你可以給我**原因**爲什麼這是一個錯誤的答案和反對票? – Blip

相關問題