Java中的Exception和Error

Exception和Error關係

  1. Exception和Error都繼承自Throwable。
  2. Error通常是程序沒法恢復的一些比較嚴重的錯誤。Exception是程序仍是有可能恢復的。
  3. Exception分檢查型異常和非檢查型異常。檢查型異常是在編譯的時候就沒法經過,須要進行處理的,好比IOException。非檢查型異常又稱爲運行時異常,是在運行的時候出現的錯誤。

異常處理的最佳實踐

  1. 儘可能不要捕獲或者拋出相似Exception這樣籠統的異常,應該是具體的異常好比InterruptedException。
  2. 不要生吞異常。也就是說catch Exception後什麼都不作,這樣會很難排查出問題。
  3. 在finally中只要作關閉資源等操做,切勿處理返回值。
  4. 不要使用異常控制流程。
  5. 異常越早拋出去越好。
  6. 儘可能避免使用try catch。
  7. 自定義異常繼承自RuntimeException。

擴展

  • NoClassDefFoundError和ClassNotFoundException區別?
  1. ClassNotFoundException是一個異常,好比經過Class.forName加載一個類,可是這個類不在classpath目錄下,運行是會拋出改異常。
  2. NoClassDefFoundError是一個Error,jvm或者classLoader加載該類,卻找不到類的時候,會報這個錯誤。好比打包的時候,編譯正常,可是運行的時候沒有這個jar或者jar損壞或者篡改。

參考連接

https://zhuanlan.zhihu.com/p/29005176jvm

相關文章
相關標籤/搜索