Exception和Error關係
![](http://static.javashuo.com/static/loading.gif)
- Exception和Error都繼承自Throwable。
- Error通常是程序沒法恢復的一些比較嚴重的錯誤。Exception是程序仍是有可能恢復的。
- Exception分檢查型異常和非檢查型異常。檢查型異常是在編譯的時候就沒法經過,須要進行處理的,好比IOException。非檢查型異常又稱爲運行時異常,是在運行的時候出現的錯誤。
異常處理的最佳實踐
- 儘可能不要捕獲或者拋出相似Exception這樣籠統的異常,應該是具體的異常好比InterruptedException。
- 不要生吞異常。也就是說catch Exception後什麼都不作,這樣會很難排查出問題。
- 在finally中只要作關閉資源等操做,切勿處理返回值。
- 不要使用異常控制流程。
- 異常越早拋出去越好。
- 儘可能避免使用try catch。
- 自定義異常繼承自RuntimeException。
擴展
- NoClassDefFoundError和ClassNotFoundException區別?
- ClassNotFoundException是一個異常,好比經過Class.forName加載一個類,可是這個類不在classpath目錄下,運行是會拋出改異常。
- NoClassDefFoundError是一個Error,jvm或者classLoader加載該類,卻找不到類的時候,會報這個錯誤。好比打包的時候,編譯正常,可是運行的時候沒有這個jar或者jar損壞或者篡改。
參考連接
https://zhuanlan.zhihu.com/p/29005176jvm