异常处理--Exception(一)
很诱人的标题,今天不是给大家介绍,而是跟大家讨论些问题。
在做开发的这几年中,大大小小的项目也经历了很多,但无论那个项目中,都没有真正的对Exception进行完整的处理。虽然我们在学C#的时候,经常会看到此类的介绍,但我们真的学以致用了吗?
先来看看什么是Exception
Exception的解释是异常,每次当我们程序调式的时候,或多或少的会遇到它(如果你的程序没有遇到过,那你是天才)。Richer在它的书中,反复的提到,Exception是对原有接口的一种违背。一开始我反复不能理解,当我真的去考虑这个问题,深入这个主题的时候,我才明白了,它就是一种违背,参数错、对象空等等我们常见的异常,都是因为我们对接口的定义有违背了,所以系统才会抛出异常。
例:
var str = "int";
int i = Convert.ToInt32(str);
这个转换会抛出一个异常出来,虽然Convert.ToInt32(string str)是一个合法的方法,但是输入的str必须是能转换成Int值的,否则就回抛出异常。这是对它方法定义的一种违背。
Exception 不等于 Error
错误的解释很广泛,可能包含了异常,但是Exception 不等于 Error 的
稍微简单的介绍了一下异常,我想很多开发者一定对它非常熟悉了,但是真正对它的处理,我们做的并不好,很多人认为原有的系统异常已经足够我们去寻找bug了,我们只需要测试到位就可以了,但这是错误的思想,这也是可怕的思想,因为你不知道何时何地何处会抛出一个你不知道的异常,Win Form应用程序遇到了异常是非常可怕的,如果没有处理,就会直接关闭应用程序,在我们Web Application中,虽然HttpApplication会对我们未处理的异常封装,抛出一个UnhandlingException,对你要知道,你的网站可是面对着不同的用户,他们看到如此结果会如何呢?有人会说,我用错误页面来包装一下,这样看上去是友好化的。没错,这是一个解决方案,可你想过吗?你要如何去知道这些Exception呢?除非你的网站人员遇到了,会及时通知你,但如果是客户遇到呢?
我们不能守株待兔,我们是合格的程序员,我们的代码是我们的孩子,我们必须给他最好的,包括他生病,我们就得马上给他医治,如果没有生病,我们也必须打疫苗、提高抵抗力,也要及时想好应对方案,以免到时候会手忙脚乱。所以我们必须要有一套好的解决机制,才能应对各种突发事件。
真正完美的解决方案有吗?我可以很肯定的告诉你,没有。无论是开发何种应用程序,你的开发人员、环境、编程习惯、开发流程都会影响到这一套解决方案,如何解决,我的观点是:从人开始。
代码是死的,人是活的,我们必须时刻的意识到,我们是为创造程序而生的,不是为解决工作而做的,程序的美,是人之美,程序之bug,乃人之bug,一个程序的好坏,其实就能看出一个人的思维。应用程序发生异常,不代表是开发者的无能,这或许是一个好的体验机会,让你更好的能学习到解决之道。
在处理Exception的时候,我们需要注意几点,大家可以看另外一篇"设计异常解决方案的几点注意事项",这是最近看到一本书中介绍的,这是网上找来的中文版,非常好的。这些规范很大程度上让我们能处理很多Exception了,但是,还是那句话,从人开始,开发者的应用、开发者的思维都是很重要的,一个公司统一的技术规范,是非常有必要的,在其他代码中,你可以随意,但是在处理异常的时候,你必须按照这个规范来,因为他真的非常重要而又非常容易忽视的,每个公司都应该对其进行一定的培训,代码的Review,都是必不可少的。
单元测试
单元测试虽然也是一种解决方案,但并不是每个单元测试都会解决你系统中的Bug。
说了这么多,其实我想让大家了解异常的重要性,也让大家在开发过程中,能尽量想到这些,以免造成不可设想的后果。
后续我会给大家带来一定的解决方案,结合这几年的经验,开发一套通用的ExceptionHandling,当然这还需要大家对我的支持:P
出处:http://www.cnblogs.com/inday/archive/2009/04/17/1437657.html
异常处理--Exception(一)的更多相关文章
- 异常处理—Exception(三)
最近有点事,把这个系列给落下了,给大家道个歉,这里还要感谢我的老婆,谢谢她一直对我的支持:) 系列回顾: 1.异常处理--Exception(一) 2.异常处理—Exception(二) 上一篇中主要 ...
- 异常处理—Exception(二)
在上一篇中"异常处理--Exception(一)"中,跟大家简单介绍了一下Exception,也使大家充分的了解了Exception管理在一个项目中的重要性,那如何在我们的项目中处 ...
- 异常处理 Exception
一.异常类 1.在C#中所有的异常都是使用一个异常类型的示例对象表示的,这些异常类型都是继承自System.Exception类型,或者直接使用System.Exception类型的实例对象: 2.在 ...
- ORACLE PL/SQL异常处理(Exception)学习笔记
1.PL/SQL错误类型 错误类型 报告者 处理方法 编译时错误 PL/SQL编译器 交互式地处理:编译器报告错误,你必须更正这些错误 运行时错误 PL/SQL运行时引擎 程序化地处理:异常由异常处理 ...
- Akka(26): Stream:异常处理-Exception handling
akka-stream是基于Actor模式的,所以也继承了Actor模式的“坚韧性(resilient)”特点,在任何异常情况下都有某种整体统一的异常处理策略和具体实施方式.在akka-stream的 ...
- java异常处理Exception
我看别人的面经中有一道题目就问到了Exception,即java的异常处理的,我曾经也学了java的异常处理,可是我查了下,看了别人的博客关于写的exception异常处理.我发现,自己学的不坚固,仅 ...
- Java自学-异常处理 Exception
Java 异常 Exception 异常定义: 导致程序的正常流程被中断的事件,叫做异常 步骤 1 : 文件不存在异常 比如要打开d盘的LOL.exe文件,这个文件是有可能不存在的 Java中通过 n ...
- java 异常和异常处理Exception
Java Exception: 1.Error 2.Runtime Exception 运行时异常3.Exception 4.throw 用户自定义异常 异常类分两大类型:Error类代表了编译和系统 ...
- Python之异常处理-Exception
在写python程序时, 不要害怕报错, 也不要怕自己的英语不够好, 不要看到一有红色的字就心里发怂. 其实报的错也是有套路可寻滴~识别了异常的种类, 才能对症下药. 常见异常: Exception ...
随机推荐
- 卡在了“正在设定 ttf-mscorefonts-installer”的解决
方向键啊鼠标的都不行,其实用tab键就可以选择了.冏死--
- SpringBoot+MyBatis简单数据访问应用
因为实习用的是MyBatis框架,所以写一篇关于SpringBoot整合MyBatis框架的总结. 一,Pom文件 <?xml version="1.0" encoding= ...
- HDU 4681 STRING dp+暴力。
题意:不说了很好懂. 这题这么水= =...当时竟然没有勇气暴力搜一下.昨天(好吧前天.)比赛的时候胃疼,看到这题想了一个办法就是对每一个出现最短的C串前后连接然后对这个串求最长公共子序列.其实优化一 ...
- 【hive】解析url格式字符串
解析url格式字符串 parse_url() parse_url(url_str,’xxx’):第一个参数是url格式字符串,第二个参数为要解析出来的属性 parse_url(‘http://face ...
- 由浅入深了解EventBus:(三)
原理 EventBus的核心工作机制如下图 在EventBus3.0架构图: EventBus类 在EventBus3.0框架的内部,核心类就是EventBus,订阅者的注册/订阅,解除注册,以及事件 ...
- ASP.NET MVC添加Action就找不到
这个诡异的bug困扰我好多回了,今天又碰到了,就把它记录下来吧. 不要随便改变web项目的编译路径 Output让它保持原样就好了...
- 判断两个控件在同一个Window上是否有重叠
判断两个控件在同一个Window上是否有重叠 //对UIView写分类 - (BOOL)intersectWithView:(UIView *)view; - (BOOL)intersectWithV ...
- Mac怎么安装Windows10
当前 Windows10 系统的预览版已经出来,对于新系统感兴趣的不只是使用 PC 电脑的用户,还有一些是当前正在使用 Mac 系统的用户.其实安装 Windows 10 与以前安装 Windows ...
- cookies分类
Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie. 内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的.硬盘Cooki ...
- Windows 64位系统下安装JAVA环境
文件名称:jdk-7u51-windows-x64 下载Windows 64位平台的JDK安装文件. 安装 1.双击打开下载好的文件,点击“下一步”开始安装. 2. ①默认选择安装全部功能,不做调整. ...