首先,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。