Java異常簡單介紹

本文收錄在豬哥GitHub: https://github.com/pig6/Java 中,本項目收集一線大廠面試、實戰、Java學習路線等。

1、異常產生的原理

JVM針對程序運行監測出的異常建立個異常對象,對象包含了異常產生的:內容、緣由、位置。根據程序邏輯將異常對象層層拋出或者處理。java

2、Throwable體系

1.Error

錯誤Error通常是指java虛擬機相關的問題,如系統崩潰、虛擬機出錯誤、動態連接失敗等,這種錯誤沒法恢復或不可能捕獲,將致使應用程序中斷,一般應用程序沒法處理這些錯誤,所以應用程序不該該捕獲Error對象,也無須在其throws子句中聲明該方法拋出任何Error或其子類。git

  1. VirtualMachineErrorgithub

    • OutOfMemoryError
    • StackOverflowError
  2. LinkageError面試

    • NoClassDefFoundError
    • NoSuchMethodError
  3. 。。。

2.Exception

1> 運行時異常 RuntimeException:是指「能夠避免的異常」,如 null引用異常,這類異常都是由程序內部緣由形成的,是能夠避免的,考驗開發的嚴謹性,所以這個問題是咱們做爲一名開發必需要避免發生的,再大的公司每一年總會有幾回事故是由於NPE致使的,咱們若是由於這種問題被通報了就是很尷尬的事情了(對生產環境必定要有足夠的敬畏心啊)。學習

常見的運行時異常有如下幾種:編碼

  • NullPointerException
  • ClassCastExecption
  • ArithmeticException
  • IndexOutOfBoundsException
  • ClassNotFoundException

2> 非運行時異常:表明「沒法避免的異常」 如io異常,每每這類異常是因爲外部緣由形成的,程序自己沒法保證他們不發生,因此這類異常必須捕獲,這就是咱們在使用io資源或者操做線程好比sleep的時候必需要捕獲或者拋出的緣由。spa

常見的有:線程

  • IOException
  • InterruptedException
  • SQLException
  • 自定義的非RuntimeException

在這裏插入圖片描述

3.Check And UnCheck

1>CheckedException:等價於非運行時異常,要麼捕獲,要麼拋出,不然編譯沒法經過。表明「沒法避免的異常」 如io異常 每每這類異常是因爲外部緣由形成的,程序自己沒法保證他們不發生
2>UnCheckedException:包括:Error&運行時異常對象

3、方法

  • toString:異常類信息+異常信息描述
  • getMessage:異常信息描述
  • printStackTrace:最經常使用打印完整的錯誤堆棧信息

4、catch仍是throw

一般應該捕獲那些知道如何處理的異常,而將那些不知道如何處理的異常進行傳遞。若是想傳遞一個異常,就必須在方法的聲明中添加一個throws說明符,以便告知調用者這個方法可能會拋出異常。blog

5、finally

  1. 不管是否出現異常都會執行
  2. 必須與try一塊兒使用
  3. 注意:finally中有return語句永遠返回finally中的return,try塊中的return不會生效

在這裏插入圖片描述

6、其餘

  1. 若是父類拋出了多個異常,子類重寫父類方法的時候,拋出和父類相同的異常//是父類異常的子類//或者不拋出
  2. 父類方法沒有拋出異常,子類重寫父類該方法的時候也不能夠拋出異常。此時子類產生該異常,只能捕獲處理,不能聲明拋出
  3. 使用習慣:

    • 不要丟棄異常,捕獲異常後須要進行相關處理。若是用戶以爲不能很好地處理該異常,就讓它繼續傳播,傳到別的地方去處理,或者把一個低級的異常轉換成應用級的異常,從新拋出
    • catch語句應該指定具體的異常類型。不能把不應捕獲的異常也捕獲了
    • 在finally裏面釋放資源。若是finally裏面也會拋出異常,也同樣須要使用try..catch處理
    • 不要把大量的代碼塞在try...catch塊裏面,分離各個可能出現異常的語句並分別捕獲異常

遺留問題: 編碼中是該捕獲Exception仍是Throwable呢?歡迎評論區交流!!

相關文章
相關標籤/搜索