让我们回顾一些从对象设计总结的基本异常设计准则:角色,职责和协作(Rebecca Wirfs-Brock和Alan McKean,Addison-Wesley,2003年)。

不要尝试处理编码错误。

除非在错误情况下要求您的软件采取特殊措施,否则不要花很多时间设计它来检测编程错误并从中恢复。 对于超出范围的数组索引,除零错误或任何其他编程错误,最好的策略是快速失败(并留出可用于解决问题的审计线索)。

避免声明很多异常类。

仅当您期望对代码进行某种处理时,才根据例外类型创建新的例外类。 以我的经验,情况很少,而Java API中提供的异常类可以达到目的。 每当您提高抽象级别时,就将低级别的异常重铸为高级别的异常。

不要让实现细节作为异常从方法调用中泄漏出去。

否则,您的用户可能会认为您的软件已损坏。 当低级异常渗透到高级处理程序时,几乎没有上下文可以帮助处理程序做出明智的决定或报告可追溯到任何明显原因的条件。 每当您跨越抽象边界重播异常时,将使异常处理程序在调用链中的更高位置进行更明智的决策。 如果要在重铸问题时包含问题跟踪,则始终可以创建链接的异常。 链接的异常提供了附加的上下文,并包含对原始较低级别异常的引用。 您可以重复链接异常。

提供上下文以及异常。

在异常处理中最重要的是有助于创建明智响应的信息。 异常类保存信息。 除了默认情况下提供的准系统堆栈跟踪信息之外,您还可以将它们设计为包含信息。 您可能包括引发异常的参数值,特定的错误文本或对计划恢复有用的详细信息。

尽可能处理与问题接近的异常。

作为第一道防线,请考虑初始请求者。 如果呼叫者知道足够的信息来执行纠正措施,则可以当场纠正情况。 如果您在远离源的地方传播异常,则可能很难跟踪源。 通常,距离问题较远的对象无法做出有意义的决策。

仅将异常用于表示紧急情况。

不应引发异常以指示正常的分支条件,这些条件会改变调用代码中的流程。 例如,查找操作可能返回零,一个或多个对象,因此在这种情况下,我不会引发异常。 相反,我将设计自己的find()方法以返回空对象或空集合。 另一方面,断开数据库连接确实是紧急情况。 无法按计划继续进行任何操作。

不要重复抛出相同的异常。

尽管在引发异常之前不花费任何费用,但经常引发异常的程序运行得更慢。

参考:来自我们的JCG合作伙伴 Sanjeev Kumar的“异常处理指南/最佳实践” ,位于Architect's Diary博客上。

翻译自: https://www.javacodegeeks.com/2012/04/exception-handling-guidelines-best.html

异常处理准则和最佳实践相关推荐

  1. 【转】Java中关于异常处理的十个最佳实践

    原文地址:http://www.searchsoa.com.cn/showcontent_71960.htm 导读:异常处理是书写强健Java应用的一个重要部分,Java许你创建新的异常,并通过使用 ...

  2. Django开发准则与最佳实践

    最近在网易云课堂学习一门django高级实战教程,本文是学习课时14.15的一些笔记 Django开发准则与最佳实践 一.优先使用自定义用户模型 继承BaseUserManager和AbstractB ...

  3. Java 异常处理的 20 个最佳实践,你知道几个?| CSDN 博文精选

    作者 | 武培轩 责编 | 屠敏 出品 | CSDN 博客 异常处理是 Java 开发中的一个重要部分,是为了处理任何错误状况,比如资源不可访问,非法输入,空输入等等.Java 提供了几个异常处理特性 ...

  4. 来自Google资深工程师的API设计最佳实践

    来自Google资深工程师Joshua Bloch的分享:API设计最佳实践 为什么API设计如此重要?API是一个公司最重要的资产. 为什么API的设计对程序员如此重要? API一旦发布,出于兼容性 ...

  5. Java 异常处理的 9 个最佳实践

    Java 异常处理的 9 个最佳实践 原文地址:https://dzone.com/articles/9-... 翻译出处:https://www.oschina.net/trans... 在 Jav ...

  6. 《转载》Java异常处理的10个最佳实践

    本文转载自 ImportNew - 挖坑的张师傅 异常处理在编写健壮的 Java 应用中扮演着非常重要的角色.异常处理并不是功能性需求,它需要优雅地处理任何错误情况,比如资源不可用.非法的输入.nul ...

  7. Java 异常处理的 9 个最佳实践 1

    点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 来源:开源中国 在 Java 中,异常处理是个很麻烦的事情.初学者觉得它很难理解,甚至是经验丰富的开发 ...

  8. java 异常 最佳实践_关于JAVA异常处理的20个最佳实践

    在我们深入了解异常处理最佳实践的深层概念之前,让我们从一个最重要的概念开始,那就是理解在JAVA中有三种一般类型的可抛类: 检查性异常(checked exceptions).非检查性异常(unche ...

  9. 关于JAVA异常处理的20个最佳实践

    关于JAVA异常处理的20个最佳实践 在我们深入了解异常处理最佳实践的深层概念之前,让我们从一个最重要的概念开始,那就是理解在JAVA中有三种一般类型的可抛类: 检查性异常(checked excep ...

最新文章

  1. 〖Linux〗Bash快捷键使用
  2. vue小项目总结与笔记【六】——使用axios发送ajax请求
  3. js中的apply()、call() 和 bind()
  4. 【数据挖掘笔记十】聚类分析:基本概念和方法
  5. Excel 打开csv显示在一个单元格
  6. Java的新视差控件(JavaFX)
  7. 关于操作 ASP.NET Web API的实例
  8. 5_Windows下利用批处理切换IP地址
  9. JSP开发环境配置问题解答
  10. Velocity模板基本常用语法
  11. GooFlow修改元素color(背景/字体/连线)
  12. 华硕服务器主板安装系统提示驱动,肿么安装电脑的主板芯片组驱动程序步骤华硕主板intel芯片...
  13. 全脑地图:单个记忆被拆分存储在多个相连的大脑区域
  14. 永远的道长——林正英
  15. 汇编语言cf,of,sf,zf
  16. [ooc-lang]一门冷门的面向对象编程的语言使用小结
  17. PHPStorm 常用 设置配置 和快捷键大全 Win/Mac
  18. 启动Nginx提示:the“ssl“ parameter requires ngx_http_ssl_module in
  19. DCloud的uniapp如何实现微信刷脸支付
  20. Ubuntu 下 Pytorch, Tensorflow 对应的Python、英伟达显卡驱动、CUDA、CUDNN版本与环境信息查看方法

热门文章

  1. 读入的字节都写入字节数组中_使用Java将文件读入字节数组的7个示例
  2. poj doubles_余数运算符在Java中用于Doubles
  3. jpa 关联实体的关联实体_JPA实体锁定模式的差异
  4. java8 streams_Java SE 8新功能介绍:使用Streams API处理集合
  5. 从Java 11中删除的API
  6. how2java_HOW TO:构造Java类的原型
  7. AWS共享资源的警告
  8. 使用Spock测试您的代码
  9. Java命令行界面(第6部分):JOpt简单
  10. 近似线性依靠matlab_不要仅仅依靠单元测试