異常的概念和處理
阿新 • • 發佈:2018-11-25
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 }
這個例子最後只會輸出 "陣列越界了",因為異常只被捕捉一次,且後面的程式碼不再執行。即使下面出現其他異常,也不會執行。