Java錯誤與異常的基本概念:
1.java中異常均繼承自Throwable,其有兩個重要的直接子類error與exception.
2.java錯誤error,大部分是由虛擬機爆出來的錯誤,是程序無法處理的錯誤,如OutOfMemoryError,當JVM需要更多內存空間而得不到滿足時,就會爆出OutOfMemoryError。
3.Exception,異常,其下分類很多,如可查異常與不可查異常,運行時異常與非運行時異常,基本概念一樣,只是說法不同罷了。其有個重要的子類即RuntimeException運行時異常,其它直接子類都歸為非RuntimeException,如IOException,SQLException等。
a.非RuntimeException是在代碼書寫時,編譯器給你檢查提示你要進行try catch或throws處理。
IOException和SQLException
b.RuntimeException,編譯器不會幫你自動檢查,當你運行程序時,虛擬機才會給你爆出錯誤讓你去處理,這個往往是我們編碼邏輯或不規范導致的
下面我們來看看java異常類結構層次圖:
異常中的try,catch,throw,throws,finally,相信都能很好理解,下面我重點來說自定義異常了。
自定義異常(重點)
A) 概念:一般在開發中只要業務方法出現例外基本上都交給一個異常類來處理。
B)如何開發:
i. 建立一個類,讓此類繼承Exception(一般不用)或RuntimeException(常用)
ii. 建立一個成員變量message,顯示寫出無參構造和有參構造
1.自定義一個類,集成自Exception
2.重寫父類Exception所有的公共方法
3.重載構造函數
iii. 在業務方法處聲明此異常
vi. 在業務方法中顯示拋出自定義異常對象
為什么要使用自定義異常,有什么好處?
1.我們在工作的時候,項目是分模塊或者分功能開發的 ,基本不會你一個人開發一整個項目,使用自定義異常類就統一了對外異常展示的方式。
2.有時候我們遇到某些校驗或者問題時,需要直接結束掉當前的請求,這時便可以通過拋出自定義異常來結束,如果你項目中使用了SpringMVC比較新的版本的話有控制器增強,可以通過@ControllerAdvice注解寫一個控制器增強類來攔截自定義的異常並響應給前端相應的信息(關於springMVC控制器增強的知識有空再和大家分享)。
3.自定義異常可以在我們項目中某些特殊的業務邏輯時拋出異常,比如"中性".equals(sex),性別等於中性時我們要拋出異常,而Java是不會有這種異常的。系統中有些錯誤是符合Java語法的,但不符合我們項目的業務邏輯。
4.使用自定義異常繼承相關的異常來拋出處理后的異常信息可以隱藏底層的異常,這樣更安全,異常信息也更加的直觀。自定義異常可以拋出我們自己想要拋出的信息,可以通過拋出的信息區分異常發生的位置,根據異常名我們就可以知道哪里有異常,根據異常提示信息進行程序修改。比如空指針異常NullPointException,我們可以拋出信息為“xxx為空”定位異常位置,而不用輸出堆棧信息。
轉至:https://www.cnblogs.com/Pjson/p/8572542.html
自定義異常
1、繼承類
一般會選擇繼承Exception和RuntimeException,如果不要求調用者一定要處理拋出的異常,就繼承RuntimeException。
2、自定義異常類構造方法
代碼實例:
People實體類
public class People { String name=""; int age=0; String sex; public String getSex() { return sex; } public void setSex(String sex) throws Exception{ if("男".equals(sex) || "女".equals(sex)) { this.sex=sex; } else { throw new GendorException("性別必須是男或者女"); } } }
自定義異常類
public class GendorException extends Exception { public GendorException(String msg) { super(msg); } }
測試
public class Test { public static void main(String[] args) { // TODO Auto-generated method stub People p=new People(); try { p.setSex("Male"); } catch (Exception e) { System.out.println("設置性別出錯了"); e.printStackTrace();//輸出異常信息 } } }
效果:
轉至:https://www.cnblogs.com/schangxiang/p/11179314.html