自定義異常目的
為了表示應用程序的一些特定錯誤訊息並提供新的含意。
如考慮伺服器的連線問題雖然可以全部使用 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();
        }
    }