Day015 Error和Exception

Error和Exception


什麼是異常


  • 實際工作中,遇到的情況不可能是非常完美的。比如:你寫的某個模組,用戶輸入不一定符合你的要求、你的程式要打開某個文件,這個文件可能不存在或者文件的格式不對,你要讀取資料庫的數據,數據可能是空的等。我們的程式在跑著,記憶體或磁碟可能滿了。等等。

  • 軟體程式在運行過程中,非常可能遇到剛剛提到的這些異常問題,我們叫異常,英文名是:Exception,意思是例外。這些,例外情況,或者叫異常, 怎麼讓我們寫的程式做出合理的處理。而不至於程式崩潰。

  • 異常指程式運行中出現的不期而至的各種情況,如:文件找不到、網路連接失敗、非法參數等。

  • 異常發生在程式運行期間,它影響了正常的程式執行流程。


異常的例子


例1 遞歸調用死循環

public class demo01 {
    public static void main(String[] args) {
        new demo01().a();
    }

    public void a(){
        b();
    }

    public void b(){
        a();
    }
}

輸出結果

Exception in thread "main" java.lang.StackOverflowError

例2:除數為0

    public static void main(String[] args) {
        System.out.println(11/0);
    }

輸出結果

Exception in thread "main" java.lang.ArithmeticException: / by zero

異常的簡單分類


  • 要理解java異常處理是如何工作的,你需要掌握以下三種類型的異常:

  • 檢查性異常:最具代表的檢查性異常是用戶錯誤或問題引起的異常,這是程式無法預見的。

    例如要打開一個不存在的文件時,一個異常就發生了,這些異常在編譯時不能被簡單地忽略。

  • 運行時異常:運行時異常是可能被程式設計師避免的異常。與檢查性異常相反,運行時異常可以在編譯時被忽略。

  • 錯誤Error:錯誤不是異常,而是脫離程式設計師控制的問題。錯誤在程式碼中通常被忽略。例如:當棧溢出時,一個錯誤就發生了,它們在編譯也檢查不到的。


異常體系結構


  • Java把異常當做對象來處理,並定義一個基類java.lang.Throwable作為所有異常的超類。在Java API中已經定義了許多異常類,這些異常類分為兩大類,錯誤Error和Exception。


Error


  • Error類對象由虛擬機生成並拋出,大多數錯誤與程式碼編寫者所執行的操作無關。

  • Java虛擬機運行錯誤(VirtulMachiineError),當JVM不再有繼續執行操作所需的記憶體資源時,將出現OutOfMemoryError。這些異常發生時,Java虛擬機(JVM)一般會選擇執行緒終止;

  • 還有發生在虛擬機視圖執行應用時,如類定義錯誤(NoClassDefFoundError)、鏈接錯誤(LinkageError)。這些錯誤是不可查的,因為它們在應用程式的控制和處理能力之外,而且大多數是程式運行時不允許出現的狀況。


Exception


  • 在Exception分支中有一個重要的子類RuntimeException(運行時異常)

    • ArrayIndexOutOfBoundsException(數組下標越界)
    • NullPointerException(空指針異常)
    • AirthmeticException(算術異常)
    • MissionResourceException(丟失資源)
    • ClassNotFoundException(找不到類) 等異常,這些異常是不檢查異常,程式中可以選擇捕獲處理,也可以不處理。
  • 這些異常一般是由程式邏輯錯誤引起的,程式應該從邏輯角度儘可能避免這類異常的發生;

  • Error和Exception的區別 :Error通常是災難性的致命的錯誤,是程式無法控制和處理的,當出現這些異常時,Java虛擬機(JVM)一般會選擇終止執行緒;Exception通常情況下是可以被程式處理的,並且在程式中應該儘可能的去處理這些異常。

狂神說java