一,異常的概念數據庫
程序在運行時,發生了咱們沒有預測的結果,它阻止了程序按照咱們預期效果執行jvm
二,怎麼保證咱們的程序在發生異常之後 ,代碼繼續執行?函數
異常處理機制對象
在程序發生異常之後,還能按照咱們事先設定好的邏輯,繼續執行後續代碼!繼承
三,異常的分類和結構圖文檔
1.全部異常和錯誤的父類--Throwable編譯器
Throwable類是Java異常類型的頂層父類,一個對象只有是Throwable類(直接或間接的)實例,它纔是一個異常對象。才能被異常處理機制識別,JDK中內建了一些經常使用的異常類,咱們也能夠自定義異常it
2.根據編譯器對異常的處理要求,異常分倆類io
2.1運行時異常(RuntimeException):在程序運行期間產生的異常!編譯
2.2受查異常(checked Excep):在程序編譯期產生的異常!
3 Throwable
3.1 Error //這個錯,靠異常處理機制處理不了,通常是代碼問題形成的堆棧爆炸等
3.2 Exception
3.2.1 受查異常
3.2.1.1 IOException
3.2.1.2 EOFException
3.2.1.3 ClassNotFoundException
3.2.1.4 FileNotFoundException
3.2.2 RuntimeException
3.2.2.1 ArithmeticException
3.2.2.2 InputMismatchException
3.2.2.3 NullPointException
四,異常處理方式(一):try-catch-finally
1.try的使用
001.try代碼塊不能單獨使用,必須和catch或finally中的一個一塊兒使用
002.可能發生異常的代碼
003.若是咱們try代碼塊中不發生異常,有finally的狀況下,先執行finally,以後執行finally以後的代碼塊
若是咱們try代碼塊發生異常,先去catch中匹配異常,若是匹配成功,執行對應的catch,不然執行finally,而後程序終止
2.catch的使用
001.每個catch代碼塊都是用於捕獲並處理一個特定的異常或者是這個異常的子類!
002.catch(ArithmeticException ex) 定義了異常類型
003.能夠同時出現多個,但不能重複
004.多個catch代碼塊中異常類型書寫順序,必須是 從小到大
005.咱們會從多個catch代碼塊中找到一個最早匹配的,而後交給這個代碼塊處理
006.每一個代碼塊中的變量是獨立的,別的代碼塊不能訪問
007.若是每一個代碼塊都不匹配。先去執行fianlly,以後終止程序
008.若是try中沒有發生異常,則全部catch塊被忽略
009.jdk1.7的版本中支持多個異常聲明在一個catch塊中
3.finally的使用
001.不管發生什麼,fially都會執行
002.若是try中沒有異常,可是有return,這時候會先執行finally以後執行return
003.若是代碼中出現System.exit(int status)那麼不會執行finally
System.exit(0); 正常退出
System.exit(非0); 非正常退出
004.作一些程序的清理工做,關閉流,釋放數據庫的鏈接等
五,異常處理方式(二):throw-throws
1.throw
01.拋出的異常類型能夠是Exception或者其子類
02.一條throw語句只能拋出一個異常對象
03.throw只能出如今方法體內
04.對於throw拋出的異常咱們有倆種處理方式
001.try。。。catch。。。finally
002.throws
2.throws
01.throws聲明在方法的名稱以後
02.throws能夠聲明多個 ,每一個異常異常之間用逗號隔開
03.throws能夠聲明異常,表示當前方法能夠出現異常,房法的調用者來處理異常
04.若是在主函數中使用throws,則由咱們的jvm處理
六,異常鏈
用處:例子:連環汽車追尾,如何頭車找到尾車
異常鏈是指將捕獲的異常包裝進一個新的異常中,新異常中 記錄原始異常的信息,並從新拋出異常的處理方式
七,自定義異常
建立繼承Exception的類,或繼承Exception的子類的類
重寫構造,寫單個帶String,還有帶String和異常對象的那個構造
八。異常的使用原則
1.異常只能用於非正常狀況
2.爲異常提供說明文檔
3.儘量避免異常,特別是運行異常
4.保持異常的原子性
5.避免過於龐大的try代碼塊
6.在catch塊中指定具體的異常類型
7.不要在catch塊中忽略捕獲的異常