1. 程式人生 > >(二)對比Exception和Error,執行時異常與一般異常的區別

(二)對比Exception和Error,執行時異常與一般異常的區別

  1. Excpetion和Error都是繼承了Throwable,在java中只有Throwable型別的例項才能丟擲throw或者捕獲catch,它是異常處理機制的基本組成型別。

  2. Exception:是程式正常執行情況下,可以預料的意外情況,可以並且應該被捕獲,進行相應處理。

  3. Error:是指在正常情況下,不大可能出現的情況,絕大部分的error都會導致程式處於非正常的、不可恢復狀態。既然是非正常情況,所以不便於也不需要捕獲。常見的比如:OutOfMemoryError。

  4. Exception:又可分為檢查異常和不檢查異常。可檢查異常在原始碼裡必須顯式的進行捕獲處理,這是編譯檢查的一部分。不檢查異常

    就是所謂的執行時異常,比如:NullPointerException,ArrayIndexOutOfBoundsException,通常是可以編碼避免的邏輯錯誤,具體需要來判斷是否需要捕獲,並不會在編譯期強制要求。

  5. 常見Error:NoClassDefFoundErrir, VirtualMachineError, OutOfMemoryError, StackOverflowError

常見的Exception:IOException,RuntimeException、NullPointerException、ClassCastException、SecurityException/ClassNotFoundException 

  1. 從效能角度分析java異常處理機制:try-catch程式碼會產生額外的效能開銷,或者它會影響jvm對程式碼進行優化,所以建議捕獲有必要的程式碼段。
  2. java每例項化一個Exception,都會對當時的棧進行快照,造成效能開銷變大