自定義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。這個能夠拋出異常,並準肯定位,缺點是不能處理這個異常自定義異常的話能夠捕獲而且處理app

public Queue(int initialSize) {
        if (initialSize >= 0) {
            this.maxSize = initialSize;
            data = new Object[initialSize];
        }else {
            throw new RuntimeException("初始化大小不能小於0:"+initialSize);
        }
    }
相關文章
相關標籤/搜索