格拉布斯准则异常数据_异常处理准则和最佳实践

格拉布斯准则异常数据

让我们回顾一些基本的异常设计准则,这些准则从“对象设计:角色,职责和协作”中进行了总结(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

格拉布斯准则异常数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357008.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用CSDN云服务搭建一个WordPress 个人站点(详细教程)

目录 前言 站点效果图 搭建服务的一些准备工作 第一步。进入到云服务我的账号模块,创建一个项目, 第二步,先免费领取一台云主机, 第三步,进入云主机控制台 搭建站点操作步骤 第一步,登录云主机 第二…

echarts 卡_图表太丑怎么破,ECharts神器带你飞!

一、前言在本专栏或文集中,我曾多次使用ECharts绘制图表、进行可视化,也渐渐积累了30多个实例,本文对此前用过的所有图表和代码进行整理并分享,以给想绘制精美图表的人一点绵薄的帮助。其中全部实例已上传ECharts3官网的个人主页&…

Apache Lucene基础教程

课程大纲 Apache Lucene是一个免费/开源信息检索软件库,它提供基于Java的索引和搜索技术,以及拼写检查,命中突出显示和高级分析/令牌化功能。 Lucene是完全用Java编写的高性能,功能齐全的文本搜索引擎库。 它是一项适用于几乎所有…

使用CSDN云服务搭建一个WordPress 个人站点(视频教程)

目录 前言 视频教程 文字版教程 云主机体验地址 官方文档 前言 六一儿童节体验了一下CSDN云主机相关的服务,感觉最近官方最近变化很大,业务范围很广,这里简单体验了一下云主机,给大家分享一点心得,希望对大家有所启…

sql性能优化之多表联查

先贴上我优化后的核心代码: select * into #result from ( select p.AchivementCount,isnull(a.ByAttentionCount,0) ByAttentionCount, u.Id,u.FullName,j.Name PostionName,u.ProfessionId,u.Disabled,u.UserName,u.ResearchArea,u.PositionId,u.DepartmentId,u.O…

石板切割问题c语言_岩知识 | 岩板切板有讲究,工艺问题要注意

岩板的火继续烧着,岩板的深加工厂在不断地增加着,岩板的深加工产品正在走向各个建筑项目,逐渐在受到很多项目的宠爱。岩板作为与天然石材完全不同的产品,其优越的理化性能在许多方面胜过天然石材,但也有其严重的不足。…

JavaScript测验题回顾-刷题笔记001

目录 1.我们可以在下列哪个 HTML 元素中放置 Javascript 代码?​编辑 2.写 "Hello World" 的正确 Javascript 语法是? 3.插入 Javacript 的正确位置是? 4.引用名为 "xxx.js" 的外部脚本的正确语法是? 5.如…

C/C++中无条件花括号的妙用

C/C中无条件花括号可以形成一个代码块,一个作用域。可以使括号内定义的变量就只在本域(就是这个大括号)内有效,而且不会影响其他域,即使名字相同。 在花括号内,如果变量前面带类型,则相当于新创…

java 方法委托托管_Java Web托管选项流程图

java 方法委托托管我经常被问到的一个问题是在何处以及如何托管Java Web应用程序。 在带有嵌入式服务器的Eclipse中创建它很好,但是如何将它带给人们呢? 长期以来,对于发烧友的程序员一直没有答案。 只有昂贵和超大型的选择。 事情最近发生了…

react重新渲染菜单_React实现递归组件

前言今天来实现一个 React 的递归组件。具体的效果图如下:图片说明假设后端返回的数据如下:[{ id: 1, parent_id: 0, name: 广东省, children: [{ id: 2, parent_id: 1, name: 广州市, …

JavaScript测验——给代码添加注释---第一关

校验规则 创建一个//样式的注释, 被注释的文本至少要包含 5 个字符。 创建一个/* */样式的注释, 被注释的文本至少要包含 5 个字符。

举重设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因,并了解何时以及如何应用模式中的每一个。 在这里查看 ! 目录 …

JavaScript测验——声明变量---第2关

校验规则 注意: 变量名称可以由数字、字母、美元符号$ 或者 下划线_组成,但是不能包含空格或者以数字为开头。 闯关: 使用var 关键字来创建一个名为salePrice的变量。

palapaweb怎样开启服务_为什么说微服务,要从前后端分离开始?一文带你揭秘深入微服务...

前言既要低头赶路,又要抬头望天,科技是为人服务的,任何技术背后都有更深层次的考量。之前的文章中咱们聊了很多微服务的相关内容,简而言之,微服务的本质,就是一种可以加速分工、促进合作的新协作机制。知其…

list集合

List集合 List集合的概述 有序集合(也称之为序列),用户可以精确的控制列表中的每个元素的插入位置。用户可以通过整数索引访问元素,并搜索列表中的元素 与 Set 集合不同,列表通常允许重复的元素 List 集合的特点 有…

JavaScript测验——使用赋值运算符---第3关

校验规则 以上代码数值8被赋给变量myVar中,然后再次将变量myVar解析为8并将其赋给myNum变量。 闯关: 把数值6赋给变量 x。 然后把变量x中的内容赋给变量y。

antd table排序 vue_商品品牌业务之Vue编写前端页面

今天是刘小爱自学Java的第145天。感谢你的观看,谢谢你。学习计划安排如下:打算从前端页面到后台服务器代码完整地写一遍,但显然我高估了自己的实力,几个小时的时间根本不够用。并且因为教程和vue现在最新的组件用法不一样&#xf…

websphere内存设置_WebSphere Classloader内存泄漏预防

websphere内存设置解决应用程序类加载器泄漏 应用领域 倾向于: 使用应用程序类加载器中的Runnable实现启动新线程。 即使JEE编程模型不支持此功能,客户也经常直接创建新线程或通过使用间接创建它们 计时器 客户必须确保在停止相应的应用程序&#xf…

zookeeper删除节点的权限_Zookeeper使用超级用户删除带权限的节点

1.背景Zookeeper管理员会因为某些客户端对某些节点设置了权限,而导致在紧急的情况下无法修改这些节点感到困扰。在这种情况下,管理员可以通过Zookeeper超级用户模式访问这些节点,一旦设置了超级权限访问节点,后续的操作就不需要ch…

JavaScript测验——使用赋值运算符初始化变量---第4关

通常在声明变量的时候会给变量初始化一个初始值。 例如: var myVar 0; 以上代码创建一个名为myVar的变量并指定一个初始值0。