25异常体系

try/catch/finally

  • 如果没有try,异常将击穿所有的栈帧
  • catch可以将一个异常抓住
  • finally执行清理工作
  • JDK+:try-with-resources
    • try=>catch=>finally=>return
    • try-with-resources -> try-finally
    • try-with-resources相当于自动加一个finally块调用了close方法
    • try如果没有catch但是发生异常会向上找catch方法块来捕获

throw/throws

  • throw抛出一个异常
  • throws只是一个声明

Java的异常体系

  • Throwable - 可以被抛出的东西(有毒)
  • Exception - checked execption(受检异常,有毒,代表
  • 一种预料之中的异常,IOException)
  • RuntimeException (运行时异常,无毒,代表一种预料之外的异常,因此不需要声明)
  • Error (错误,无毒)
  • catch的级联与合并 从小到大

Throwable

  • 栈轨迹 Stacktrace (排查问题最重要的信息,没有之一)
  • 异常链(Caused by)

异常的抛出原则

  • 能用if/else处理的,不要使用异常
  • 尽早抛出异常
  • 异常要准确、带有详细信息
  • 抛出异常也⽐比悄悄地执行错误的逻辑强的多

异常的处理原则

  • 本方法是否有责任处理这个异常?
  • 不要处理不归自己管的异常
  • 本方法是否有能力处理这个异常?
  • 如果自己无法处理,就抛出
  • 如非万分必要,不要忽略异常

了解和使用JDK内置的异常

  • NullPointerException
  • ClassNotFoundException/NoClassDefFoundError
  • IllegalStateException
  • IllegalArgumentException
  • IllegalAccessException
  • ClassCastException
  • ...

异常实战

  • 从同学的例题说起
  • https://github.com/hcsp/http-login-and-use-cookie/
  • pull/
  • https://github.com/hcsp/fix-simple-npe-of-
  • uninitialized-field/pull/
  • https://github.com/hcsp/implement-sem-version/
  • pull/
  • SQLException

练习
# 在文件中查找匹配的行号
正确处理数据库连接的异常

「资料来源:饥人谷」

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注