异常处理经验谈-阿里云开发者社区

开发者社区> zhuweisky> 正文

异常处理经验谈

简介: 1.异常处理相对于返回错误代码的一个最大优点在于,异常可以被自动传递,这样,在编程时异常更加难以被忽视。 2.通常,只在最上层(一般是UI层)捕捉异常。如果要在其它层捕捉异常,除非是下列情况之一: (1)能够处理该异常,或者 (2)能够忽略该异常,或者 (3)需要转换该异常为其它特定异常后抛出新异常 3.UI层捕获异常后,可以 (1)将无关紧要的异常忽略。
+关注继续查看

1.异常处理相对于返回错误代码的一个最大优点在于,异常可以被自动传递,这样,在编程时异常更加难以被忽视。

2.通常,只在最上层(一般是UI层)捕捉异常。如果要在其它层捕捉异常,除非是下列情况之一:
 (1)能够处理该异常,或者
 (2)能够忽略该异常,或者
 (3)需要转换该异常为其它特定异常后抛出新异常

3.UI层捕获异常后,可以
 (1)将无关紧要的异常忽略。
 (2)将异常转换为错误信息展现给用户。
 (3)如果是重大异常,可以考虑终止应用程序。

4.最上层(一般是UI层)不得抛出新的异常;最上层需要捕捉所有异常,否则异常会直接导致程序终止,这将是非常不好的用户体验。

5.可以在非最上层抛出自定义异常。如果是自定义异常,请保证其是可序列化的,并且保证其实现了Exception的三个构造函数。

6.异常的抛出与截获需要很多的cpu时间,请谨慎的使用异常。

7.在可能抛出异常的地方,如果需要,请确保使用finally进行资源清理,而无论此处是否捕捉了异常。

8.在一个catch块中的代码都应该至少部分地处理了所捕捉的异常。否则,就不要使用catch块。

9.从构造函数中抛出异常。
  因为构造函数没有返回值,所以没有简单的方法来想构造函数的调用者发出构造失败的信号,这时便可以通过抛出异常来做到。比如构造参数与指定条件不符时,就抛出一个异常。 

10.在以上前提的保证下,可以在非最上层使用AOP截获(intercept)异常而进行日志记录,这样通过日志记录,我们可以了解系统的  运行状态。记不起在哪里看到过这样一句话:在软件实现中,异常和日志都是重要的质量保证手段,异常和日志总是同时出现的。
  可以说,异常是日志记录的重要/主要组成部分。

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
网站大并发处理
一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构、性能的要求都很简单,随着互联网业务的不断丰富,网站相关的技术经过这些年的发展,已经细分到很细的方方面面,尤其对于大型网站来说,所采用的技术更是涉及面非常广,从硬件到软件、编程语言、数据库、WebServer、防火墙等各个领域都有了很高的要
1383 0
Knative Eventing 中如何排查Event事件处理异常
在 Knative Eventing 如果事件处理过程出现异常,如何进行排查?本文通过一个实际中遇到的事件处理异常 issue 的角度, 介绍了事件排查处理方式。
1284 0
python 异常处理
文件写入操作,如果发生IO异常,则打印没找到文件,读取文件失败异常。 try: fh = open("testfile", "w") fh.write("这是一个测试文件,用于测试异常!!") except IOError: print "Error: 没有找到文件或读取文件失败" else: print "内容写入文件成功" fh.
603 0
日常环境莫名宕机的处理
## 背景 11.21 早上 pd 给讲法务评审的时候,操作日常环境,莫名就 down 机了,而且 pd 反馈经常会这样。(ps : pd 反馈系统请求时间过长,性能很差,后续也会排查解决) 于是排查了一下系统 down 机的原因 ## 原因 查看内存 setenv.sh 设置 if [ $memTotal -le 2048 ]; then SERVICE_OPTS="${SE
966 0
socket中的函数遇见EINTR的处理【转】
转自:http://blog.chinaunix.net/uid-21501855-id-4490453.html 这几天,写服务器代码过程当中,遇见EINRT信号的问题,我是借鉴 《unp 》,采用continue或者goto again循环解决的。
1222 0
spring异常处理
还是上次数据不能为空的问题,写到了C层测试。 先写一行测试代码,先期待一个200,但是我们是知道的,因为没有学科类别,这肯定会抛出异常,我们就是想看看Spring捕获这个异常之后给出的反馈是什么状态码。
781 0
+关注
zhuweisky
从事软件开发行业十多年,专注于网络通信技术和网络语音视频技术,擅长系统架构设计、系统性能优化等。zhuweisky.cnblogs.com
300
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《Nacos架构&原理》
立即下载
《看见新力量:二》电子书
立即下载
云上自动化运维(CloudOps)白皮书
立即下载