1. 程式人生 > 其它 >Java異常詳解

Java異常詳解

異常概念:

異常(Exception) :是指程式在執行中的出現的錯誤,程式本身可以捕獲並處理,例如:在進行除法運算時,若除數為0,則執行JAVA是會自動丟擲算數異常。
Java 異常 :也是通過一個物件來表示的,程式執行時丟擲的異常,實際上就是一個異常物件,該物件中不僅封裝了錯誤的資訊,還提供了一些處理方法。

異常能被程式本身可以處理,錯誤是無法處理。

異常體系結構:

常見的異常類列表

注意:若不知道程式碼丟擲是那種異常,可以指定它們的父類 Throwable 和 Exception。

Exception分類:執行時異常和編譯異常

1、執行時異常(不受檢異常):RuntimeException類極其子類表示JVM在執行期間可能出現的錯誤。比如說試圖使用空值物件的引用(NullPointerException)、陣列下標越界(ArrayIndexOutBoundException)。此類異常屬於不可查異常,一般是由程式邏輯錯誤引起的,在程式中可以選擇捕獲處理,也可以不處理。

2、編譯異常(受檢異常):Exception中除RuntimeException極其子類之外的異常。如果程式中出現此類異常,比如說IOException,必須對該異常進行處理,否則編譯不通過。在程式中,通常不會自定義該類異常,而是直接使用系統提供的異常類。

異常的處理機制

JVM預設的異常處理方式:在控制檯列印錯誤資訊,並終止程式。

丟擲異常, 呼叫者處理 (throw/throws)

方法上直接throws 丟擲

捕獲異常,自己處理 (try-catch(finally))
try {
       //可能產生的異常的程式碼區
   }catch (ExceptionType1 e) {
       //捕獲並處理try丟擲異常型別為ExceptionType1的異常
   }catch (ExceptionType2 e){
       //捕獲並處理try丟擲異常型別為ExceptionType2的異常
   }finally{
       //無論是出現異常,finally塊中的程式碼都將被執行
   }

try-catch-finally程式碼塊的執行順序: 

  1.try沒有捕獲異常時,try程式碼塊中的語句依次被執行,跳過catch。如果存在finally則執行finally程式碼塊,否則執行後續程式碼。

2.try捕獲到異常時,如果沒有與之匹配的catch子句,則該異常交給JVM處理。如果存在finally,則其中的程式碼仍然被執行,但是finally之後的程式碼不會被執行。

3.try捕獲到異常時,如果存在與之匹配的catch,則跳到該catch程式碼塊執行處理。如果存在finally則執行finally程式碼塊,執行完finally程式碼塊之後繼續執行後續程式碼;

   否則直接執行後續程式碼。另外注意,try程式碼塊出現異常之後的程式碼不會被執行。

  以下幾種情況,finally程式碼塊不會被執行:

  1、在前邊的程式碼中使用System.exit()退出應用。

  2、程式所在的執行緒死亡或者cpu關閉

  3、如果在finally程式碼塊中的操作又產生異常,則該finally程式碼塊不能完全執行結束,同時該異常會覆蓋前邊丟擲的異常。

我話講完!誰贊成?誰反對?