自定義異常目的
為了表示應用程序的一些特定錯誤訊息並提供新的含意。
如考慮伺服器的連線問題雖然可以全部使用 IOException 來表示,但各種連線問題卻可再度細分,如
伺服器關閉(ServiceClosedException) , 連線超時(ConnectTimeoutException),使用者中斷(ClientInterruptException)等等。
Note :
自定義異常必須在Throwable 體系中派生,否則不能在應用程序中傳播。
不可直接繼承Throwable,因為Throwable已經定義好2個主要分支(Error & Exception)
也不要繼承自Error 及其子類別,因為自定義通常不符合錯誤標準。
一般繼承自Exception。
自定義異常步驟
1.定義異常類別
需要繼承Throwable 或是Throwable的子類別,並提供多個建構式,最好能夠傳入String 以便儲存錯誤訊息。
public class ServiceClosedException extends Exception { private Date mConnectDate = new Date(); public ServiceClosedException() { } public ServiceClosedException(String message) { super(message); } public ServiceClosedException(String message, Date connectDate){ super(message); mConnectDate = connectDate; } public Date getConnectDate(){ return mConnectDate; } }
2.聲明方法拋出自定義類別
public void connectService() throws ServiceClosedException { }
3.找到故障點,建立異常並加上關鍵字 throw
public void connectService() throws ServiceClosedException { if(!mIsServiceConnect){ throw new ServiceClosedException(); } }
4.自定義異常完成後,client呼叫會丟出自定義異常的方法就必須處理或是聲明該自定義異常
@Test public void testConnectService() { try { connectService(); } catch (ServiceClosedException e) { e.printStackTrace(); } }