一、異常的架構:
Throwable類:所以異常類都是Throwable的子類,它派生兩個子類 Error和Exception。
Error類:表示僅靠程序本身無法恢復的的嚴重錯誤,比如內存溢出,虛擬機錯誤等,這些異常除了盡力使程序安全退出外,我們並沒有辦法去解決,所以開發的時候我們更應該關注的是Exception
Exception類:由java應用程序拋出和處理的非嚴重錯誤,如文件找不到,網絡連接中斷,數組下標越界等,它的不同的子類分別對應不同類型的異常
運行時異常:包括RuntimeException類及其子類,不要求程序員必須對它們做出處理,如果程序發生運行時異常,而我們並沒有處理,會輸出異常的堆棧信息,並終止程序運行
Checked異常(非運行時異常):除了運行時異常外的其他由Exception繼承來的異常類,程序必須捕獲或者聲明拋出這種異常。否則程序無法編譯通過,如如IOException、SQLException等異常
二、自定義異常的步驟:
當JDK提供的異常類型不能滿足程序的需求時,我們可以自定義異常
1.定義一個普通類,並繼承exception或RuntimeExceprion,繼承Exceprtion的自定義異常為Checked異常(必須拋出或者try cacth),繼承自RuntimeExceprion的自定義異常類為運行時異常
2.編寫異常類的構造方法,並繼承父類實現,常見的如下:

/** * 自定義異常類 */ public class MyException extends Exception { public MyException() { } public MyException(String message) { super(message); } /** * * @param message 需要顯示的異常信息 * @param cause 為Throwable或其子類的實例 */ public MyException(String message, Throwable cause) { super(message, cause); } public MyException(Throwable cause) { super(cause); } }

@Test public void getMessage() throws Exception { try { int a= 10/0; } catch (Exception e) { throw new MyException("10不能除以0"); } }
除了繼承自Exception還可以繼承RuntimeException,具體例子就不往下寫了
三、throw和throws的區別
主要區別有以下三點:
1、作用不同:throw用於在程序中拋出異常;throws用於在該方法內拋出了異常;
2、使用的位置不同:throw位於方法體內,可以作為單獨語句使用;throws必須跟在方法參數列表的后面,不能單獨使用;
3、內容不容:throw拋出一個異常對象,而且只能是一個;throws后面跟異常類,而且可以跟多個異常類