真正工作了才發現,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的話,直接下載工程吧:
[http://download.csdn.net/detail/u013142781/9422684](http://download.csdn.net/detail/u013142781/9422684)
- 前言
- Java生成中間logo的二維碼(還可以加上二維碼名稱哦)
- Java我的高效編程之常用函數
- AES加密解密&&SHA1、SHA加密&&MD5加密
- Java中synchronized的使用實例
- Java基礎之集合
- Java基礎之泛型
- Java基礎之枚舉妙用
- 那些年用過的一些前端框架
- 關于正則,那些年一直存在的疑惑解答(正則菜鳥不容錯過)
- 給pdf文件添加防偽水印logo(附工程源碼下載)
- SpringMVC+BUI實現文件上傳(附詳解,源碼下載)
- Java異常封裝(自己定義錯誤碼和描述,附源碼)
- javaweb異常提示信息統一處理(使用springmvc,附源碼)
- 關于Java,那些我心存疑惑的事(不斷更新中...)
- 深入Java虛擬機(1)——Java體系結構
- 深入Java虛擬機(2)——Java的平臺無關性
- 深入Java虛擬機(3)——安全
- 深入Java虛擬機(4)——網絡移動性
- Linux文件編輯命令詳細整理
- 阿里云服務器云數據庫免費體驗(Java Web詳細實例)
- 項目部署、配置、查錯常用到的Linux命令
- Shell腳本了解
- Ajax原理學習
- linux下安裝apache(httpd-2.4.3版本)各種坑
- JSP九大內置對象
- Servlet再度學習
- 開發人員系統功能設計常用辦公軟件分享
- java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener問題解決
- tomcat內存溢出解決,java.lang.OutOfMemoryError: PermGen space
- 《Java多線程編程核心技術》推薦
- 關于跳槽,是我心浮氣躁?還是我確實該離開了?
- Java I/O學習(附實例和詳解)
- Java經典設計模式之五大創建型模式(附實例和詳解)
- Java經典設計模式之七大結構型模式(附實例和詳解)
- Java經典設計模式之十一種行為型模式(附實例和詳解)
- Java內存管理
- SQL實例整理
- 數據庫面試常問的一些基本概念