西南IT社区
    • 注册
    • 登录
    • 搜索
    • 主页
    • 问答
    • 话题
    • 热门
    • 圈子
    • 工作机会
    • 活动
    • 项目

    处理 Exception 的实践方法

    极客生涯
    处理 exception 方法
    1
    1
    29
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 破
      破茧边缘 最后由 编辑

      在 Java 中处理异常并不是一个简单的事情。

      在 Finally 块中清理资源或者使用 try-with-resource 语句:当使用类似 InputStream 这种需要使用后关闭的资源时,一个常见的错误就是在 try 块的最后关闭资源。

      指定具体的异常:尽可能的使用最具体的异常来声明方法,这样才能使得代码更容易理解。

      对异常进行文档说明:当在方法上声明抛出异常时,也需要进行文档说明。和前面的一点一样,都是为了给调用者提供尽可能多的信息,从而可以更好地避免 / 处理异常。异常处理的 10 个最佳实践,这篇也推荐看下。

      抛出异常的时候包含描述信息:在抛出异常时,需要尽可能精确地描述问题和相关信息,这样无论是打印到日志中还是监控工具中,都能够更容易被人阅读,从而可以更好地定位具体错误信息、错误的严重程度等。

      首先捕获最具体的异常:现在很多 IDE 都能智能提示这个最佳实践,当你试图首先捕获最笼统的异常时,会提示不能达到的代码。当有多个 catch 块中,按照捕获顺序只有第一个匹配到的 catch 块才能执行。因此,如果先捕获IllegalArgumentException,那么则无法运行到对 NumberFormatException 的捕获。

      不要捕获 Throwable:Throwable 是所有异常和错误的父类。你可以在 catch 语句中捕获,但是永远不要这么做。如果 catch 了 throwable,那么不仅仅会捕获所有 exception,还会捕获 error。而 error 是表明无法恢复的 jvm 错误。因此除非绝对肯定能够处理或者被要求处理 error,不要捕获 throwable。

      包装异常时不要抛弃原始的异常:捕获标准异常并包装为自定义异常是一个很常见的做法。这样可以添加更为具体的异常信息并能够做针对的异常处理。需要注意的是,包装异常时,一定要把原始的异常设置为 cause(Exception 有构造方法可以传入 cause)。否则,丢失了原始的异常信息会让错误的分析变得困难。

      ab41e7ed-38f7-4ca7-8b8c-807b3c1597c0-image.png

      1 条回复 最后回复 回复 引用 0
      • First post
        Last post
      使用HTML构建办公软件 使用HTML构建办公软件 使用HTML构建办公软件
      破
      成
      Y
      洋
      书
      Y
      D
      U
      Y
      娇
      玩
      1
      光
      A
      庆
      小
      U
      Y
      L
      I
      Z
      I
      Y
      C
      Z

      西南地区IT社群(QQ)
      云南
      【昆明网页设计交流吧】243627302
      【昆明nodejs交流吧】 243626749
      【VUE】838405306
      【云南程序员总群】343606807
      【昆明UI设计】104031254
      【云南软件外包】15547313
      贵州
      【PHP/java源码/站长交流群】55692114
      四川
      【成都Java/JavaWeb交流】86669225
      【vaScript+PHP+MySql】116270060
      【UI设计/设计交流学习群】135794928
      重庆
      【诺基亚 JAVA游戏博物馆】 559479780
      【PHP,Java,Python,C++接单】 442103442
      西藏
      社群
      昆明网页设计交流吧
      友情链接
      • Funtask
      • Funtask 社区
      • SUWIS
      ©2019-2021 滇ICP备20006698号