自定義異常構建
首先寫一個自定義異常,繼承Exception,代碼如下
public class NoMappingParamString extends Exception { /*無參構造函數*/ public NoMappingParamString(){ super(); } //用詳細信息指定一個異常 public NoMappingParamString(String message){ super(message); } //用指定的詳細信息和原因構造一個新的異常 public NoMappingParamString(String message, Throwable cause){ super(message,cause); } //用指定原因構造一個新的異常 public NoMappingParamString(Throwable cause) { super(cause); } }
使用自定義異常
如果自定義異常是為了提示,一定要用try..catch,不要直接用throw往外拋。這樣只能被框架捕獲。
/*結果resultType字段set方法*/ public void setResultType(String resultType) { this.resultType = resultType == null ? null : resultType.trim(); //resultType結果封裝 //自定義一個resultTypeString字段,用來根據resultType的值(1,2,3)自動生成對應的文本 /*這樣寫的好處是集中管理,后台代碼中只在此處管理,不好的地方是運營時突然加一個值就會返回未知類型,要更新要把后端重新編譯發布,也就意味着要重啟(把值傳給前端讓前端判斷是不用重啟的)。這種方案只適用於類型固定的字段*/ if (resultType!=null) { int rt = Integer.parseInt(resultType); //將flag轉換為int值 switch (rt) { //判斷屬於那種類型,就給resultTypeString賦予對應的值 case 1: resultTypeString ="未處理"; break; case 2: resultTypeString ="自動解除"; break; case 3: resultTypeString ="已解除"; break; default: resultTypeString = "未知類型"; /*這里一定要try catch異常,因為這是set方法,throw出去大部分情況是被框架獲取*/ try { /*實例化自定義異常*/ NoMappingParamString exception = new NoMappingParamString("resultType類型未完善"+"未知resultType:"+resultType); /*拋出異常*/ throw exception; } catch (NoMappingParamString e) { //捕獲異常 System.err.println("異常信息:"+e.getMessage()); //獲取異常信息,就是上面傳的message e.printStackTrace(); //把棧信息打印出來 } break; } }else { resultTypeString = ""; //如果flag為null返回為空 } }
僅僅為了提示,又不想自定義一個Exception,可以用RuntimeException。這個可以拋出異常,並准確定位,缺點是不能處理這個異常,自定義異常的話可以捕獲並且處理。
public Queue(int initialSize) { if (initialSize >= 0) { this.maxSize = initialSize; data = new Object[initialSize]; }else { throw new RuntimeException("初始化大小不能小於0:"+initialSize); } }
