自定義異常
理解error茎芭、RuntimeException(運行時缭受,虛擬機報的錯)和非RuntimeException(編譯時娃循,編譯器找出的錯)
????1.java中異常均繼承自Throwable,其有兩個重要的直接子類error與exception.
????2.java錯誤error适揉,大部分是由虛擬機爆出來的錯誤黔牵,是程序無法處理的錯誤,如OutOfMemoryError,當JVM需要更多內存空間而得不到滿足時,就會爆出OutOfMemoryError聪轿。
????3.Exception,異常,其下分類很多荧止,如可查異常與不可查異常屹电,運行時異常與非運行時異常,基本概念一樣跃巡,只是說法不同罷了危号。其有個重要的子類即RuntimeException運行時異常,其它直接子類都歸為非RuntimeException素邪,如IOException,SQLException等外莲。
????????a.非RuntimeException是在代碼書寫時,編譯器給你檢查提示你要進行try catch或throws處理。
????????b.RuntimeException,編譯器不會幫你自動檢查偷线,當你運行程序時磨确,虛擬機才會給你爆出錯誤讓你去處理,這個往往是我們編碼邏輯或不規(guī)范導致的
自定義異常声邦,步驟乏奥,三步走:
????1.繼承RuntimeException
????2.重載構造函數
????3.重寫方法
比如:
public class SellException extends RuntimeException{
1.繼承RuntimeException
????private Integer code; //異常碼,類似于狀態(tài)碼亥曹,前端根據code作相應處理
????public SellException(ResultEnum resultEnum) {2.重載構造函數
????????super(resultEnum.getMessage());
????????this.code = resultEnum.getCode();
}
???? public SellException(Integer code, String message) {
????????super(message);
????????this.code = code;
}
}
用法:throw new SellException(ResultEnum.PRODUCT_NOT_EXSIT);
使用枚舉對象封裝常量
枚舉對象為enum類型邓了,
步驟:
????1.創(chuàng)建構造函數,參數為常量值和常量含義
????2.創(chuàng)建枚舉對象
@Getter
public enum OrderStatusEnum implements CodeEnum {
????NEW(0, "新訂單"),
????FINISHED(1, "完結"),
????CANCEL(2, "已取消"),
;
????private Integer code;
????private String message;
????OrderStatusEnum(Integer code, String message) {
????????this.code = code;
????????this.message = message;
????}
}
使用框架要注意版本
????在使用spring data jpa時媳瞪,發(fā)現(xiàn)只有 <S extends T> S findOne(Example<S> var1)骗炉;沒有入參為String/Integer的API,后來排查發(fā)現(xiàn)是版本問題蛇受,當下使用的是2點幾的版本句葵,應該使用 <version>1.5.3.RELEASE</version>
改用版本后,發(fā)現(xiàn)了API:T findOne(ID var1);