Java異常封裝(自定義錯誤碼和描寫敘述,附源代碼)


真正工作了才發現。Java里面的異常在真正工作中使用還是十分普遍的。

什么時候該拋出什么異常,這個是必須知道的。

當然真正工作里面主動拋出的異常都是經過分裝過的,自己能夠定義錯誤碼和異常描寫敘述。

以下小寶鴿就為大家介紹一個Java異常簡單封裝的樣例。

在給出異常分裝樣例之前。須要給大家普及Java里面的checked異常和unchecked異常的個概念。

一、checked異常和unchecked異常

這里之所以讓大家清楚checked異常和unchecked異常概念,是由於:待會我們的異常是繼承unchecked異常RuntimeException的。了解一下並無壞處嘛

checked異常:

表示無效。不是程序中能夠預測的。比方無效的用戶輸入,文件不存在,網絡或者數據庫鏈接錯誤。這些都是外在的原因,都不是程序內部能夠控制的。

必須在代碼中顯式地處理。比方try-catch塊處理。或者給所在的方法加上throws說明。將異常拋到調用棧的上一層。

繼承自java.lang.Exception(java.lang.RuntimeException除外)。

unchecked異常:

表示錯誤。程序的邏輯錯誤。是RuntimeException的子類,比方IllegalArgumentException, NullPointerException和IllegalStateException。

不須要在代碼中顯式地捕獲unchecked異常做處理。

繼承自java.lang.RuntimeException(而java.lang.RuntimeException繼承自java.lang.Exception)。

看以下的異常結構圖也許層次感更加深些:

這里寫圖片描寫敘述

二、異常分裝實例

2.1、加入一個枚舉LuoErrorCode.java例如以下:

package com.luo.errorcode;

public enum LuoErrorCode {

    NULL_OBJ("LUO001","對象為空"),
    ERROR_ADD_USER("LUO002","加入用戶失敗"),
    UNKNOWN_ERROR("LUO999","系統繁忙,請稍后再試....");

    private String value;
    private String desc;

    private LuoErrorCode(String value, String desc) {
        this.setValue(value);
        this.setDesc(desc);
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    @Override
    public String toString() {
        return "[" + this.value + "]" + this.desc;
    }
}

注意!

!!

這里我們重寫了LuoErrorCode的toString方法,至於為什么要這樣。后面會提到,客觀請繼續看。

2.2、創建一個異常類BusinessException.java,繼承RuntimeException:

package com.luo.exception;

public class BusinessException extends RuntimeException {

    private static final long serialVersionUID = 1L;

    public BusinessException(Object Obj) {
        super(Obj.toString());
    }

}

這里的代碼盡管短,可是有兩點須要注意的!!!第一點是其繼承了RuntimeException。由於一般我們的業務異常都是執行時異常。

第二點,這里的構造方法調用父方法super(Obj.toString());,這就是重寫了LuoErrorCode的toString方法的原因了,假設還不明確,看完后面的你就明確了。

2.3、測試類ExceptionTest.java:

package com.luo.test;

import com.luo.errorcode.LuoErrorCode;
import com.luo.exception.BusinessException;

public class ExceptionTest {

    public static void main(String args[]) {
        Object user = null;
        if(user == null){
            throw new BusinessException(LuoErrorCode.NULL_OBJ);
        }
    }
}

執行結果:

這里寫圖片描寫敘述

補充一下:在我們實際項目里面,比方別人調用你接口。你可能須要先看他傳過來的對象是不是空的,先推斷假設傳過來的對象為空給有友好的提示”[LUO001]對象為空”。不然后面的代碼預計會出現空指針異常了。

一般公司都會分裝一個基礎框架,異常分裝是當中一部分。當然他們對異常的分裝肯定比我這個樣例復雜多,因此本例僅供參考。

假設懶得copy和paste的話,直接下載project吧:

http://download.csdn.net/detail/u013142781/9422684


免責聲明!

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



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