异常处理的发展

参考文献:

1、我们什么时候应该使用异常?:http://www.laruence.com/2012/02/02/2515.html;

2、J2EE中使用Spring进行事务和异常设计:http://blog.csdn.net/willtea/article/details/15814211;

3、异常处理经验小结:http://olylakers.iteye.com/category/121405;

什么时候使用异常?

(个人想法)当程序不能正常完成其应有的功能的时候,比如一个add函数,如果传入的参数不是数字,则无法进行add操作,这时候应该抛出异常。

再比如一个函数的功能是读取文件中的内容,如果这个文件不存在或者不具有读取的权限,则应该抛出异常,因为函数无法完成其功能,但是如果文件内容是空的,就不应该抛出异常,函数已经读取文件的内容,完成了他的功能。

关于异常的基本问题:如何区分“程序中正常的分支流程”和“需要处理的异常”?

参考文献:

1、什么时候使用异常?:http://bbs.csdn.net/topics/80182550

本帖的最后一个回复:

异常有时候是很有用的,比如说判断一个输入是否只能包含数字,要是正常判断的话就比较复杂,而要用异常就很简单了:
try{把变量转换成整型} 
catch{输入的不是一个数字}

 如果转换失败,抛出异常,说明输入包含非法字符

这种处理方式是不合理的,其实只要用正则去匹配就好了,很容易的,╮(╯▽╰)╭。

发展:

1、错误代码:C语言中的返回错误代码,或者设置全局变量的形式,问题:

  1. 信息不够丰富;

  2. 加入错误状态代码可能要改变函数签名;

  3. 错误状态可能会被忽略;

  4. 错误信息不会在系统中传播;

2、异常机制:

  1. 异常的好处:

    1. 信息丰富:错误类型、出错行、出错信息、函数调用栈等;

    2. 可以对一些异常直接进行处理,对资源进行回收,try/catch/finally;

    3. 业务逻辑的代码写在try块里,错误处理的逻辑的代码写在catch块里,资源回收的代码写在finally里;

    4. 可以自主选择处理异常的方式,处理 or 抛出;

  2. 异常的问题:

    1. 满屏都是try/catch;

    2. 虽然局部来看正常逻辑与异常处理逻辑分开了,但是从源代码文件层面来看正常逻辑与异常处理逻辑还是混在一起的;

    3. 性能,无论是否发生异常,只要try/catch在那里,代价就会变大;

    4. 该捕获没捕获,fatal error了:太多可能的uncaught exception;

3、Spring的AOP异常拦截(以下list中都不懂,想吐槽的是原来还有这玩意儿……):

  1. 有关checked exception、unchecked exception、runtime exception 的blabla……;

  2. 是在action、service、dao中的哪些层处理exception;

  3. PS:AOP的用处:

    1. logging

    2. caching

    3. security

    4. exception reporting

    5. performance counters

  4. AOP的缺点:http://stackoverflow.com/questions/875512/what-are-the-disadvantages-of-aspect-oriented-programming-aop/8607821#8607821;


你可能感兴趣的:(异常处理的发展)