一、checked異常和unchecked異常
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如下:
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;
}
}
2.2、建立一個異常類BusinessException.java,繼承RuntimeException:
public class BusinessException extends RuntimeException {
private static final long serialVersionUID = 1L;
public BusinessException(Object Obj) {
super(Obj.toString());
}
}
第一點是其繼承了RuntimeException,因為一般我們的業務異常都是運作時異常。第二點,這裡的構造方法調用父方法super(Obj.toString());
2.3、測試類ExceptionTest.java:
public class ExceptionTest {
public static void main(String args[]) {
Object user = null;
if(user == null){
throw new BusinessException(LuoErrorCode.NULL_OBJ);
}
}
}
原文連結:
Java異常封裝(自己定義錯誤碼和描述,附源碼)