1. 程式人生 > >異常的概念和處理

異常的概念和處理

1、異常和錯誤

在Java程式的執行過程中,如果發生了意外事件(發生了錯誤或異常),則該意外會被封裝成為一個物件,並把它提交給執行時的系統,尋求相應的程式碼來處理。意外事件在Java中分為兩類,即錯誤和異常;而把這個意外物件的生成和提交過程,我們稱之為丟擲。

在Java中:

  ● 錯誤 - 不受控的,程式無法處理的

  ● 異常 - 容易排查的,可以處理的

 

2、異常的體系結構

Throwable 類是 Java 語言中所有錯誤或異常的超類。其兩個子類:Error(錯誤)、Exception(異常)。

 

Error是程式無法處理的,比如OutOfMemoryError、ThreadDeath等,出現如此情況我們往往無能為力,只能交給JVM自行處理,大多數情況下,JVM會選擇終止執行緒(真是簡單粗暴...);而Exception就是程式可以處理的異常,也是我們重點要理解的部分。

 

3、異常的處理

3.1try catch

對於可能發生異常的程式碼,我們要使用 try 語句塊來進行包裹,與 try 相呼應的還要有 catch 語句塊。即 try 用來檢測不安全的程式碼,用來發現異常,而 一旦某條語句出現了異常,則從此處中止,後面的程式碼不再執行,而是直接跳轉到異常處理的程式碼塊中,即提到的 catch 語句塊。   所以:   ● try 包括需要檢測的程式碼   ● catch 發生異常時進行捕獲,並進行處理   3.2多個catch catch 緊跟在 try 語句之後,也就是用來進行異常處理的部分,實際上 catch 可以寫多個,分別用來捕獲不同型別的異常,必須從小到大(即從子類到父類)的順序進行捕獲
,否則會出現編譯錯誤,某異常只被捕捉一次
 
 1     public static void main(String[] args) {
 2         Date date = null;
 3         int[] arr = new int[] { 0, 1, 2 };
 4         try {
 5             int i = arr[5];
 6             System.out.println(i);
 7             long time = date.getTime();
8 System.out.println(time); 9 } catch (NullPointerException e) { 10 System.out.println("空指標異常發生了,好像我應該做些什麼"); 11 } catch (IndexOutOfBoundsException e) { 12 System.out.println("陣列越界了"); 13 } catch (Exception e) { 14 System.out.println("發生了異常"); 15 } 16 }

 

這個例子最後只會輸出 "陣列越界了",因為異常只被捕捉一次,且後面的程式碼不再執行。即使下面出現其他異常,也不會執行。