0%

Java 异常(四):如何使用异常

1. 异常的适用情况是

  • 异常应该且仅用于异常情况,即异常不能代替正常的条件判断
  • 真正出现异常的时候,应该抛出异常,而不是返回特殊值

2. 异常的来源大概是

  • 每种异常都应该进行适当的处理
    • 用户:用户的输入有问题
    • 程序员:编程错误
    • 第三方:泛指其他情况,如 I/O 错误、网络、数据库、第三方服务等

3. 异常处理的目标是

  • 处理的目标可以分为恢复报告
    • 恢复是指通过程序自动解决问题。报告的最终对象可能是用户,即程序使用者,也可能是系统运维人员或程序员
    • 报告的目的也是为了恢复,但这个恢复经常需要人的参与
  • 程序都不应该假定第三方是可靠的,应该有容错机制
    • 如果是用户:如果用户输入不对,可以提示用户具体哪里输入不对
    • 如果是编程错误:可以提示用户系统错误、建议联系客服
    • 如果是第三方连接问题:可以提示用户稍后重试

4. 异常处理的一般逻辑是

  • 如果自己知道怎么处理异常,就进行处理;如果可以通过程序自动解决,就自动解决;如果异常可以被自己解决,就不需要再向上报告
  • 如果自己不能完全解决,就应该向上报告。如果自己有额外信息可以提供,有助于分析和解决问题,就应该提供,可以以原异常为 cause 重新抛出一个异常
  • 总有一层代码需要为异常负责。可能是知道如何处理该异常的代码,可能是面对用户的代码,也可能是主程序;如果异常不能自动解决
    • 对于用户,应该根据异常信息提供用户能理解和对用户有帮助的信息
    • 对运维和开发人员,则应该输出详细的异常链和异常栈到日志

5. 为什么要有异常处理机制

  • 在没有异常机制的情况下,唯一的退出机制就是 return,判断是否异常的方法就是返回值
  • 程序的正常逻辑和异常逻辑混杂在一起,代码的可读性可维护性变差
  • 程序员经常偷懒,假装异常不会发生:joy:

6. 异常处理机制的好处

  • 处理异常情况的代码大大减少,代码的可读性可靠性可维护性都得到提高,具体表现在
    • 程序的正常逻辑与异常逻辑可以相分离
    • 异常情况可以集中进行处理
    • 异常还可以自动向上传递,不再需要每层方法都进行处理
    • 异常也不再可能被自动忽略
-------------------- 本文结束感谢您的阅读 --------------------