C#有关异常处理机制的几个问题,想请教求解

1、为什么一些能够在编译程序过程中轻易发现并改正的问题还要用异常处理?比如溢出、索引不对等等2、为什么要用异常处理机制?是不是程序出现的异常一般都无法解决才要用这个机制告... 1、为什么一些能够在编译程序过程中轻易发现并改正的问题还要用异常处理?比如溢出、索引不对等等
2、为什么要用异常处理机制?是不是程序出现的异常一般都无法解决才要用这个机制告诉用户有异常
3、为什么有捕获异常还要弄个throw来抛出异常使得程序中止呢?
4、什么样的异常能被抛出?什么时候要抛出异常?完美运行的程序能不能抛出异常?
5、为什么要自定义异常?既然知道哪里有异常为什么不去解决而是自定义异常呢?
求解,被C#的异常处理机制弄得团团转,问题有点多,有些可能很白痴,但就是疑惑,希望帮帮忙,分数剩下不多,希望不要介意。。。
展开
 我来答
syht2000
高粉答主

2013-07-22 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.4亿
展开全部
我个人的理解
1、异常一般是用在软件中一些意外情况的处理上,举个例子,比说你的软件是个看图软件,你用它去打开一个名叫1.jpg的图片并显示在软件中,正常情况下没什么问题,但是,有些时候这个操作可能根本无法完成(比如说这个jpg实际上是个gif格式的图片,只是扩展名被改成了jpg,又或者这个jpg数据已经损坏了),这种情况下就必须用异常去捕捉了。
2、如果不捕捉异常,你的程序遇到这种情况通常会直接退出,你可以想想看会有什么结果。
3、throw的目的是为了显示异常,但程序又不会因此中止,并且也可以引发你自定义的异常。
4、完美运行的话,就不要去抛出默认的异常,而是显示出更加友好更加详细的错误信息,你可以想想windows本身的异常是什么样的。通常来说,就要识别出不同的异常类型,然后用自定义的异常处理去处理各种可能的情况。你可以尝试将一个exe或者txt之类的文件 ,重命名为.jpg或者.jpg,然后用画图之类的去打开它看看。

5、同第一个问题
百度网友f0b09d0
2013-07-22 · TA获得超过149个赞
知道答主
回答量:77
采纳率:0%
帮助的人:71.8万
展开全部
  1. 为了防止运行时可能出现的异常

  2. 为了程序的完整性,异常处理顾名思义是异常,是为了防范于未然。一般出现异常是告知开发者而非直接跟用户相关

  3. 首先要搞清楚是throw还是throw XXXXException也就是所谓的封装异常。一些底层的异常一旦被包装,在上层再次引发异常的时候,可能无法直接定位到真实发生异常的地方。故仅使用throw将异常上抛到UI层或最上层

  4. 一般你在不确定是否会发生异常的时候需要进行异常捕捉,尤其是对于IO操作时、数值转换、空引用等情况

  5. 自定义异常是为了更好的封装的异常,但一般不建议自定义异常,用系统的异常即可

A.给你补充点,如果你是担心异常捕捉会影响性能,如你的第四个问题,‘完美运行的程序’,既然完美,我所理解的是100%不会出异常,那么这个时候你加try-catch跟不加try-catch,性能上来说,几乎无异,只在有异常发生时他们才会凸显出性能上的差异;

B.我个人建议,在必要的地方需要加上异常,在catch里面尽量少逻辑运算而可改用"通知"的方式来进行异常处理。在try块,尽可能将可能引发异常的情况用if等判断语句做下处理,如:

var tempArg = GetOneObj();//tempArg有可能为null,那么如果再进行tempArg.OtherMethod()的调用就会报NullReferenceException的异常,所以可以在调用钱先对tempArg进行判空操作。

C.多写代码,自然而然会理解,建议安装resharper,会对你学习或多或少有一点帮助

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小妻丐
2013-07-22 · TA获得超过112个赞
知道小有建树答主
回答量:274
采纳率:0%
帮助的人:166万
展开全部
如果记得程序有几万甚至几十万行代码,而代码调试的工作是由别人完成,或二次开发也是别人完成的,你说你不手动抛出异常,别人怎么能在短时间发现你的运行错误。抛异常也能提高你的编程能力,锻炼炼,你会喜欢这种方式的。
追问
既然知道有异常,为什么还要抛出而不直接解决,要留给其他人看呢?
追答
一眼就能看出有问题当然要改正问题  ,try{}catch{}finally{} try放的是有可能出现的错误不是一定会出现异常,我们知道有可能有错但是用户不知道啊 ,所以就要把错误捕获 一Messagebox()或别的的形式返回给用户提示他那里操作有误,这样软件不是更友好嘛。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Neu_Tobe
2013-07-22 · TA获得超过164个赞
知道答主
回答量:134
采纳率:0%
帮助的人:41万
展开全部
throw为的把底层发现的异常(有可能是系统异常也有可能是自定义异常)交给上层处理,比如弹个警告什么的,这类UI操作要放在主线程啊,退一步讲就算不考虑线程问题,把所有的异常都放在一个地方不是更清晰么
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-07-22
展开全部
异常跟错误是不同的,错误我们一定要去修改,但是异常我们有时候是不能修改的,譬如说除法运算,我们知道被除数不能为零,但如果你程序就给两个输入框,那么用户有可能会全部输入零,这时我们就可以捕获到异常了;又譬如说程序由于操作系统内存的缘故产生内存不足的话,我们程序就会发出内存不足的异常。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-07-22
展开全部
你有没有试过明知除数不能是0,却在计算器上用0除数,程序编得再完美,难保数据有错,所以异常是存在,有异常在影响流程时当然要停下来,已经出错了,下一步的正确数据从哪来
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式