Java中Error和Exception的异同
Error(錯誤)和 Exception(異常)都是 java.lang.Throwable 類的子類,在 Java 代碼中只有繼承了 Throwable 類的實例才能被 throw 或者 catch。
Exception 和 Error 體現了 Java 平臺設計者對不同異常情況的分類,Exception 是程序正常運行過程中可以預料到的意外情況,并且應該被開發者捕獲,進行相應的處理。Error 是指正常情況下不大可能出現的情況,絕大部分的 Error 都會導致程序處于非正常、不可恢復狀態。所以不需要被開發者捕獲。
Error 錯誤是任何處理技術都無法恢復的情況,肯定會導致程序非正常終止。并且 Error 錯誤屬于未檢查類型,大多數發生在運行時。Exception 又分為可檢查(checked)異常和不檢查(unchecked)異常,可檢查異常在源碼里必須顯示的進行捕獲處理,這里是編譯期檢查的一部分。不檢查異常就是所謂的運行時異常,通常是可以編碼避免的邏輯錯誤,具體根據需要來判斷是否需要捕獲,并不會在編譯器強制要求。
如下是常見的 Error 和 Exception:
1 . 運行時異常(RuntimeException):
NullPropagation:空指針異常;ClassCastException:類型強制轉換異常IllegalArgumentException:傳遞非法參數異常IndexOutOfBoundsException:下標越界異常NumberFormatException:數字格式異常2 . 非運行時異常:
ClassNotFoundException:找不到指定 class 的異常IOException:IO 操作異常3 . 錯誤(Error):
NoClassDefFoundError:找不到 class 定義異常StackOverflowError:深遞歸導致棧被耗盡而拋出的異常OutOfMemoryError:內存溢出異常下面代碼會導致 Java 堆棧溢出錯誤。
// 通過無限遞歸演示堆棧溢出錯誤 class StackOverflow {public static void test(int i) {if (i == 0) {return;} else {test(i++);}} }public class ErrorEg {public static void main(String[] args) {// 執行StackOverflow方法StackOverflow.test(5);} }運行輸出為:
Exception in thread "main" java.lang.StackOverflowErrorat ch11.StackOverflow.test(ErrorEg.java:9)at ch11.StackOverflow.test(ErrorEg.java:9)at ch11.StackOverflow.test(ErrorEg.java:9)at ch11.StackOverflow.test(ErrorEg.java:9)上面代碼通過無限遞歸調用最終引發了 java.lang.StackOverflowError 錯誤。
總結
以上是生活随笔為你收集整理的Java中Error和Exception的异同的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 删除集合中指定的元素
- 下一篇: Spring Boot html页面解析