1. 程式人生 > >Error與Exception的區別

Error與Exception的區別

sta 編譯 fbo 調用棧 time 邊界 err 空間 索引

首先,Error類和Exception類都是繼承Throwable類

Error(錯誤)是系統中的錯誤,程序員是不能改變的和處理的,是在程序編譯時出現的錯誤,只能通過修改程序才能修正。一般是指與虛擬機相關的問題,如系統崩潰,虛擬機錯誤,內存空間不足,方法調用棧溢等。對於這類錯誤的導致的應用程序中斷,僅靠程序本身無法恢復和和預防,遇到這樣的錯誤,建議讓程序終止。

Exception(異常)表示程序可以處理的異常,可以捕獲且可能恢復。遇到這類異常,應該盡可能處理異常,使程序恢復運行,而不應該隨意終止異常。

  Exception又分為兩類

    CheckedException:(編譯時異常) 需要用try——catch顯示的捕獲,對於可恢復的異常使用CheckedException。

    UnCheckedException(RuntimeException):(運行時異常)不需要捕獲,對於程序錯誤(不可恢復)的異常使用RuntimeException。

常見的RuntimeException異常

  illegalArgumentException:此異常表明向方法傳遞了一個不合法或不正確的參數。

  illegalStateException:在不合理或不正確時間內喚醒一方法時出現的異常信息。換句話說,即 Java 環境或 Java 應用不滿足請求操作。

  NullpointerException:空指針異常(我目前遇見的最多的)

  IndexOutOfBoundsException:索引超出邊界異常

常見的CheckedException異常

  我們在編寫程序過程中try——catch捕獲到的一場都是CheckedException。

  io包中的IOExecption及其子類,都是CheckedException。

舉個簡單的例子(看別人的,覺得很形象,很好理解)

  Error和Exception就像是水池和水池裏的水的區別

  “水池”,就是代碼正常運行的外部環境,如果水池崩潰(系統崩潰),或者池水溢出(內存溢出)等,這些都是跟水池外部環境有關。這些就是java中的error

  “水池裏的水”,就是正常運行的代碼,水汙染了、有雜質了,渾濁了,這些影響水質的因素就是Exception。

Error與Exception的區別