首先我觉得:“异常”和“未对程序中所有分支流程进行处理” 是有区别的,例如:
除数为0的异常,这种情况是应该在程序中考虑的一种情况,而不应该作为异常处理。当然还有空指针引用异常等等,这些异常都应该属于“未对程序中所有分支流程进行处理” 的范畴。
而“异常”我理解的是:你已经对你程序中你所能做到、所能控制的流程都已经处理了,但还有一些漏洞,比如数据库连接,可能程序出现错误是因为物理连接断了,这时可以使用try catch finally。不知道这样理解对不对?还有自定义异常,我理解的是:知道会发生什么特殊状况,然后根据这个特殊状况定义异常,并在catch中进行处理。  我不明白的是:既然知道会发生什么状况,为什么不在程序中作为一个分支进行处理呢?自定义异常到底有什么用呢?最后请各位高手总结一下什么时候才使用异常!谢谢!!~~~

解决方案 »

  1.   

    举你上面的例子跟你说吧:
    被除数为0的情况:我们假设这个数是个变量int a;
    它属于你所理解的“未对程序中所有分支流程进行处理”的范畴。。因为这是你所知道的。。
    可是你知道这个数a什么时候为0吗?难道你每次用到这个数都来判断这个数是否为0吗?
    当然你想这样做也可以。。但是没这个必要。。因为我们根本就不需要这种情况发生。。
    因此在这里使用catch捕捉一下异常,显得更加方便。。
    另外,异常的捕捉在调试过程中也很重要。。你捕捉到你可能考虑不到的异常。。然后进行处理。
      

  2.   

    既然知道会发生什么状况,为什么不在程序中作为一个分支进行处理呢?自定义异常到底有什么用呢?
    -------------------------------------------------------------------------------------
    min_jie(止戈)已经说得很清楚了,我再补充一下,抛出异常可以使应用程序正常终止,而用分支进行处理,则是非正常终止;还有就是异常可以用个参数来得到异常的信息,而分支进行处理是无法办到的。
      

  3.   

    谢谢您们的留言!!!不好意思,我有些愚钝,还是有些不明白,什么时候使用异常:当有除法运算的时候是判断除数是否为0:if(除数==0){} else{}
    还是直接放在try catch中?
    “但是没这个必要。。因为我们根本就不需要这种情况发生。。”
    是不是可以理解为:在程序中我们只考虑需要发生的情况,而其他的所有不需要发生的情况的均放在异常处理中?
      

  4.   

    异常:Exception有“例外”的意思,也就是在正常逻辑下不容易发生的问题,如果在编程序时只考虑正常的逻辑会比较方便和清晰。如果要分支,程序逻辑会很乱。
      

  5.   

    当出错时,,但不知道是什么错误,用个TRY{}CATCH(EXCEPTION EX){MESSAGEBOX。SHOW(EX。MESSAGE)}可以知道更多的错误信息
      

  6.   

    多看看MSDN,对每一个方法,函数都有对其可能产生的异常的描述。当你做的多了以后,就会有那么一种感觉,什么地方可能会产生异常。一般来说,容易产生异常的情况有
    1.IO OPERATION
    2.NET OPERTIOAN
    3.TYPE CAST