Exception和Error关系

- 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