浅谈对程序开发中异常的理解和熟习
核心提示:从接触异常开始我就弄不明白她,不会用她,想在系统中是异常机制发挥的淋漓尽致,进行了很多尝试,利用异常控制程序流程,利用异常做数字的判定函数,利用异常消除系统中可能出现的恼人的异常提示框...
从接触异常开始我就弄不明白她,不会用她,想在系统中是异常机制发挥的淋漓尽致,进行了很多尝试,利用异常控制程序流程,利用异常做数字的判定函数,利用异常消除系统中可能出现的恼人的异常提示框,为了更好了利用异常看了很多关于异常的文章,直到有1天看到了1句话——“永久不要往处理你不知道怎样处理的异常”,这才恍然大悟,感觉自己1直在用强大的异常机制干1些歪路左道的是事,更谈不上理解异常在程序中的地位和意义,异常实在1种报告机制,“她以1种不可躲避的方式报告程序中所出现的题目”,她帮助程序员走向正确的道路,她忠实的向程序员提供毛病报告,她希看有谁能重视并处理掉她报告的题目,哈,真不敢想象,没有了异常机制该如何编制高质量的程序!下面就个人的理解和看法瞎说几句,敬请各位批评指正,不胜感激!
异常的工作原理,在有题目的地方产生异常,马上停止当前的工作,转向异常处理代码,假设找不到异常处理代码,就会面异常向1层汇报,上1层接到异常会做一样的事,转向异常处理代码,或再将异常向上汇报,这样逐层间毛病传递出往,直到有1层处理了异常或是1直报告给程序的使用者——用户。这个层就是调用栈,当用户A运行程序B,B从函数C开始履行,调用函数D,再调用函数E,再调用函数F,这时候F出现了异常,那末这个异常的调用栈就是A(栈底)—〉B—〉C—〉D—〉E—〉F(栈顶),这个异常就会沿着这个栈从栈顶开始向栈底的方向报告,假设在函数C中有对这个异常的处理代码,那末这个异常的报告链就是F—〉E—〉D—〉C。可以看出,假设在完全的调用栈中没有处理这个异常的代码,用户A就成了异常报告的终点,向windows界面系统,会弹出1个恼人的消息对话框哈。
那末用户A向谁报告呢,哈哈,这个已不属于程序的范围了,感觉用会对程序而言仿佛上帝1样,诉说痛苦已让上帝都听到了,就心满足足了哈哈,看来程序真虔诚哈哈。对异常这个特性,也能够比喻成下属向上级报告题目,假设下属知情不报,题目就严重了,你要是领导知道下属是这样的8成绩踢了他,相反假设你有1个报告机制健全的下属队伍,哈哈你就威风了。日本企业文蛤中有个主旨——联系,商谈,报告,实在就是想让员工都具有向上级汇报的习惯。现在再看看程序,哈哈,你不用给她们灌输甚么企业文化,不用她们讲述甚么报告的重要性,她们本身就是忠实报告的,假设把程序员比作企业老总,那末程序就是练习1队有素的员工。
怎样处理异常。在这里有个原则就是“永久不要往处理你不知道怎样处理的异常”,也就是只处理你知道如何处理的异常,对那些你不知道的异常必须广开言路,并积极地向上级汇报。甚么叫知道如何处理呢?先说1下处理异常有哪些方式,大体有,弹出提示消息框(这个消息框不同于那个恼人的异常报告消息框,她是捕捉异常后,根据处理的具体环境程序员主动编写的友好的提示消息框),记录毛病日志,吞掉,做善后工作等等,那末出现异常时就要站在出现异常的模块的态度上考虑1下我应当选择哪种处理方式呢?假设不能做出选择就选择不处理,即向上级报告。
举个例子,函数Fun1是创建并返回1个活动的数据连接对象的方法,他接受1个数据库连接字符串,假设调用者(上级)给他1个毛病的连接字符串,这时候Fun1创建不了连接对象,产生了1个创建不了连接对象的异常,那末这时候他应当怎样处理这个异常呢?弹出友好的消息框?说甚么友好,Fun1根本就不知道是甚么缘由使他接收到了毛病的连接字符串,弹1个“连接字符串有误”,用户肯定都有杀你的心,这个提示和用户的业务逻辑有嘛关系!记录毛病日志,这个还行,但是记录下来的文字不过就是“连接字符串有误,连接字符串是:SQL……”,好点的话,从连接字符串中看出了题目,1般情况下还得根据代码上下文往找题目缘由。这个方式不是不行是不好。吞掉,哈哈开甚么玩笑,你既创建不了连接,又不吱1声,想让调用者疯了呀,这个肯定不行。做善后工作,行,确切应当清算1下现场,免得浪费资源,但是还是没吱1声,所以这个方式做的不完全。没招了,哈,实在上面的分析给我们指明了1条路,帮助我们祛除毛病的选择,这条路就是向上汇报,或是不加任何出来代码,或是记录日志,做些善后,再重新将异常抛出。
那末甚么时候就知道怎样处理异常了,这就得看实际的情况和用户的要求了,这句话即是没说,就像其他的标题醒目但给出的结论却模棱两可文章1样,哈哈,这里可以给几个建议,
1,1般地,底层模块或是方法中不要处理异常,
2,编写公共模块、DLL等是,不能采取弹出对话框等依托于平台,框架的方式处理异常,
3,编写公共模块、DLL等时,必须在使用文档中注明每个方法属性可能抛出的异常。
4,永久不要写 try 这样的语句。
{ } catch(Exception) { o nothing } 自定义异常。明白了异常的原理和机制后,便可以够自己定义异常了,这样的实践常常在编写控件、公共模块、DLL等的时候,用毛病编号在网上搜索1下,能找出1大堆关于毛病代码的描写。其中大多数是M(icro)S(oft)制定的,MS 从操纵系统到各种各样的框架都有对各种异常的编号,对每种异常做出了具体的定义,假设你还用过像Spread等贸易控件,也能够看到他里边的各种各样的异常定义,也就是说我们自己也能够定义异常,在必要的时候,这样便可以够让自己写的模块也加进到练习有素的员工队伍中了。至于如何定义异常,具体的编成语言有具体的做法,比如C#中指定1异常1个从Exception继续来的类,VB中异常是个全局变量等等,参见感爱好语言的语法指南便可以够了。
对异常的重新熟习,1直以来很多人都以为异常是非常可怕的,可恶的,她是毛病的化身,她有恼人的弹出对话框,弄得用户跟凶煞恶神似的哈哈,实在这些都是误解,异常1直默默地忠实的报告着程序中出现的严重的不可躲避的题目,她为了程序、系统的正确性、严谨性呼唤你,希看你重视这些题目,希看你用聪明解决这些题目,她是多么的可爱,又是多么的高尚,历来没有由于对她的误解而放弃自己的使命……(哈哈,扯淡,煽情了……)。异常很重要,我们更好学会如何往使用她。
唐山网站建设www.fw8.netTAG:程序,题目,报告,毛病,异常
评论加载中...
|