Java異常封裝

轉載: Java異常封裝

Java裏面的異常在真正工做中使用仍是十分廣泛的。何時該拋出什麼異常,這個是必須知道的。java

固然真正工做裏面主動拋出的異常都是通過分裝過的,本身能夠定義錯誤碼和異常描述。數據庫

在給出異常分裝例子以前,須要給你們普及Java裏面的checked異常和unchecked異常的個概念。網絡

1、checked異常和unchecked異常

這裏之因此讓你們清楚checked異常和unchecked異常概念,是由於:待會咱們的異常是繼承unchecked異常RuntimeException的。瞭解一下並沒有壞處嘛

checked異常:

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

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

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

unchecked異常:

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

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

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

看下面的異常結構圖或許層次感更加深些:code

2、異常分裝實例

2.一、添加一個枚舉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.二、建立一個異常類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.三、測試類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的話,直接下載工程吧:

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

相關文章
相關標籤/搜索