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

相关文章
相关标签/搜索