自定義Exception異常


自定義異常構建

首先寫一個自定義異常,繼承Exception,代碼如下

public class NoMappingParamString extends Exception {
    /*無參構造函數*/
    public NoMappingParamString(){
        super();
    }
    
    //用詳細信息指定一個異常
    public NoMappingParamString(String message){
        super(message);
    }
    
    //用指定的詳細信息和原因構造一個新的異常
    public NoMappingParamString(String message, Throwable cause){
        super(message,cause);
    }
    
    //用指定原因構造一個新的異常
    public NoMappingParamString(Throwable cause) {
        super(cause);
    }
}

使用自定義異常

如果自定義異常是為了提示,一定要用try..catch,不要直接用throw往外拋。這樣只能被框架捕獲。

    /*結果resultType字段set方法*/
    public void setResultType(String resultType) {
        this.resultType = resultType == null ? null : resultType.trim();  //resultType結果封裝
        
        //自定義一個resultTypeString字段,用來根據resultType的值(1,2,3)自動生成對應的文本
        /*這樣寫的好處是集中管理,后台代碼中只在此處管理,不好的地方是運營時突然加一個值就會返回未知類型,要更新要把后端重新編譯發布,也就意味着要重啟(把值傳給前端讓前端判斷是不用重啟的)。這種方案只適用於類型固定的字段*/
        if (resultType!=null) {
            int rt = Integer.parseInt(resultType);   //將flag轉換為int值
            switch (rt) {  //判斷屬於那種類型,就給resultTypeString賦予對應的值
            case 1:
                resultTypeString ="未處理";
                break;
            case 2:
                resultTypeString ="自動解除";
                break;
            case 3:
                resultTypeString ="已解除";
                break;
            default:
                resultTypeString = "未知類型";
                /*這里一定要try catch異常,因為這是set方法,throw出去大部分情況是被框架獲取*/
                try {   
                    /*實例化自定義異常*/
                    NoMappingParamString exception = new NoMappingParamString("resultType類型未完善"+"未知resultType:"+resultType);
                    /*拋出異常*/
                    throw exception;
                } catch (NoMappingParamString e) { //捕獲異常
                    System.err.println("異常信息:"+e.getMessage());  //獲取異常信息,就是上面傳的message
                    e.printStackTrace();  //把棧信息打印出來
                }
                break;
            }
        }else {
            resultTypeString = "";  //如果flag為null返回為空
        }
    }

僅僅為了提示,又不想自定義一個Exception,可以用RuntimeException。這個可以拋出異常,並准確定位,缺點是不能處理這個異常自定義異常的話可以捕獲並且處理

public Queue(int initialSize) {
        if (initialSize >= 0) {
            this.maxSize = initialSize;
            data = new Object[initialSize];
        }else {
            throw new RuntimeException("初始化大小不能小於0:"+initialSize);
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM