2017-07-26 46 views
0

假設我正在用Java編寫自定義異常類。這兩個構造函數有什麼區別?在哪種情況下,我想使用其中一種?Java自定義異常類的構造函數

class CustomException extends Exception{ 
    public CustomException(String msg); 
    public CustomException(String msg, Throwable cause); 
    or 
    public CustomException(String msg, Exception ex); 
} 

代碼阻止此customException一旦它捕獲遠程調用中發生的其他異常。

} catch(Exception1 | Exception2 | Exception3 ex){ 
     throw new CustomException("custom", ex) 
} 

讓Throwable給我們一個靈活性?鑑於代碼只是捕捉異常,是否有區別?

+1

https://stackoverflow.com/questions/2274102/difference-between-using-throwable-and-exception-in-a-try-catch – litelite

+0

如果你用'Throwable'聲明,你可以傳入'Throawable'如果你需要,那不是'Exception'。否則,幾乎沒有什麼區別。 – Henry

+0

但是,鑑於代碼正在傳遞異常,是否有任何可拋出的值? –

回答

1

你不應該需要一個Throwable這不是一個Exception通過。不是Exception的唯一ThrowableError s。

如果你需要傳遞給你的構造函數,這意味着你需要首先捕獲它們。捕捉Error一般是不好的,因爲根據java api,它代表合理的應用程序不應該能夠捕捉到的嚴重問題。錯誤主要是JVM中深深造成的錯誤,您無法對此做任何事情。可能你的JVM會被損壞,所以處理它們不再可靠。而且您絕對不應該嘗試將錯誤轉換爲例外。

因此,這些簽名是罰款:

public CustomException(String msg, Exception cause); 
public CustomException(String msg); 

,但這個是沒有意義的:

public CustomException(String msg, Throwable cause); 

因爲各種原因導致你想趕上和傳播是Exception S,不Error秒。