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

來源:互聯網
上載者:User

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]對象為空白”,不然後面的代碼估計會出現null 指標異常了。

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.