易码技术论坛

 找回密码
 加入易码
搜索
查看: 270440|回复: 19

知错''易''改--编程设计中的异常处理(完全后希望加精)

[复制链接]
发表于 2005-7-12 10:56:00 | 显示全部楼层
1.使用 try 和 catch 来捕捉异常.
对于程序员来说,都希望在异常出现时首先被捕捉,而不是自动把信息提示给用户.以便程序继续进行.在C#中利用 try 和 catch 就可以实现. try 包含可能会产生异常的语句,而 catch 处理一个异常.看以下的代码:
1:using System;
2:
3:class Factorial
4:{
5:pubilc static void Main(string[] arge)
6:{
7long nFactorial = 1,nCurDig = 1;
8:long nComputeTo = Int64.Parse(arge[0]);
9:
10:try
11:{
12:checked
13:{
14:for(;nCurDig <= nComputeTo; nCurDig++)
15:nFactorial * = nCurDig;
16:}
17:}
18:catch(OverflowException oe)
19:{
20:Console WriteLine(''Computing {0} caused an overflow exception'',nComputeTo);
21:return
22:}
23:
24:Console WriteLine(''{0}! is {1}'',nComputeTo,nFactorial);
25:}
26:}
正如你所见,异常处理并不麻烦.你所需要的就是在try语句中包含容易产生异常的代码,接着捕捉异常,该异常在这个例子中是 OverflowException 类型.无论一个异常什么时候被引发,在 catch 段会进行适当的处理.
如果你不事先知道哪一种异常会被预期.而仍然想处于安全状态,简单的忽略异常的类型.代码如下:
try
{
...
}
catch
{
...
}
但是,通过这个途径,你不能获得对异常现象的访问,而该对象含有重要的出错信息.一般异常处理代码是这样的:
try
{
...
}
catch(System.Exception e)
{
...
}
注意:你只能获得 e 对象中的值.
                                        (未完待续)

 楼主| 发表于 2005-7-12 12:22:00 | 显示全部楼层
使用 try 和finally 清楚异常
如果你更关心清楚错误而不是对错误的处理,try 和 finally 会获得你的喜欢。它不仅抑制了错误消息,而且所有包含在finally块中的代码在异常被引发后仍会继续执行。
看以下代码:
1:using System;
2:
3: class Factorial
4: {
5: public static void Main(string[] args)
6: {
7: long nFactorial = 1, nCurDig = 1;
8: long nComputeTo = Int64.Parse(args[0]);
9: bool bAllFine = false;
10:  
11: try
12: {
13: checked
14: {
15: for(;nCurDig <= nComputeTo; nCurDig ++)
16: nFactorial *= nCurDig;
17: }
18: bAllFine = ture
19: }
20: finally
21: {
22: if(! bAllFine)
23: Console.WriteLine(''Computing {0} caused an overflow exception'', nComputeTo);
24: else
25: Console.WriteLine(''{0}! is {1}'',nComputeTo,nFactorial);
26: }
27: }
28: }
通过检测该代码,你会发现,即使没有引发异常处理,finally也会被执行,在finally中的代码总会被执行的,不管是否有异常条件。

                                                        (未完待续)

2105_9434_892.rar

3 KB, 下载次数: 154

发表于 2005-7-12 23:25:00 | 显示全部楼层
这种文章希望注明转载还是原创.
 楼主| 发表于 2005-7-13 09:34:00 | 显示全部楼层
OK,回老F,文章是高级程序员  罗珊,马文刚  写的...我打字传上来......(寒........)
发表于 2005-7-13 14:18:00 | 显示全部楼层
汗...辛苦啊-_-b
弄完给你整理吧.不用太着急,打字很费时间的...
 楼主| 发表于 2005-7-13 21:46:00 | 显示全部楼层
来拉.第三篇.....下期将说Java了........

使用try--catch--finally处理异常
应用程序最有可能的途径是合并前面两种错误处理技术----捕获错误,清除并继续执行应用程序。所有你要做的是在处理代码中使用try,catch和finally语句。请看下面的实例:
1:using System
2:
3:class CatchIT
4:{
5:publice static void Main()
6:{
7:try
8:{
9:int nTheZero = 0;
10:int nResult = 10/nTheZero;
11:}
12:catch(DivideByZeroException divEx)
13:{
14:Console.WriteLine(''divide by zero occurred!'');
15:}
16:catch(Exception Ex)
17:{
18:Console.WriteLine(''some other exception'');
19:}
20:finally
21:{
22:}
23:}
24:}
这个例子的技巧是,它包含了多个catch语句。第一个捕获了可能出现的DivideByZeroException异常,而第二个catch语句通过捕获普通异常处理了剩下的异常。
我们肯定总是捕获特定的异常,接着是普通的异常。如果不按这个顺序捕获异常,会发生什么事情呢?看完下面这段代码你也许明白了
例:
1:try
2:{
3:int nTheZero = 0;
4: int nResult = 10/nTheZero;
5:}
6:catch(Exception Ex)
7:{
8:Console.WriteLine(''exception'' + Ex.ToString());
9:}
10:catch(DivideByZeroException divEx)
11:{
12:Console.WriteLine(''never going to see that'');
13:}
编译器将捕获到一个小错误,并类似这样报告该错误:
wrongcatch.cs(10.9): error CS0160: A previous catch clause already
catches all exceptiona of this or a super type (''System.Exception'')


                                                                  C#  结束了.谢谢捧场.下期Java
发表于 2005-7-14 12:21:00 | 显示全部楼层
C#其实"就是"Java....
 楼主| 发表于 2005-7-14 15:10:00 | 显示全部楼层
晕.明明是分开的啊???
难道我看错了??
马上找~~~~~~~~~~~~~~
 楼主| 发表于 2005-7-14 15:11:00 | 显示全部楼层
恩.没错拉....要不,两个高级程序员就在骗人了不??
发表于 2005-7-14 18:19:00 | 显示全部楼层
虽然知道怎么用,但是我在看了这么多示范代码后从来没发现有用过try 和throw catch等的
对于咱们天天只弄小程序的人啊 不实际哦
发表于 2005-7-14 18:52:00 | 显示全部楼层
你看的那里的sample?
至少我看过很多,尤其是一些严谨的代码,关于异常捕获的内容比甚至比实际有效的代码还多...
习惯从小处做起.见过很多人不写异常.小程序不写,恐怕"大"程序也会忘记.
发表于 2005-7-14 21:44:00 | 显示全部楼层
我看的从vchelp上下载的代码
主要都是GDI绘图的
100%没有try等
我看过了都
 楼主| 发表于 2005-7-14 22:10:00 | 显示全部楼层
晕啊,偶打字打的眼花花的,这位大哥却说这个没用?????
恩,不过,我还是会把全部帖出来的..........最后去你的basic帖bacic异常处理(因为这个最大.............)
发表于 2005-7-15 01:06:00 | 显示全部楼层
去看c#和java的例子.
另外,有些地方不会产生异常的.
 楼主| 发表于 2005-7-15 09:39:00 | 显示全部楼层
不错.不过.我还有关于C的异常处理...........37页(寒~~~~~~~~~~~~)
还是先来JAVA的.....晚上上传........
发表于 2005-7-15 11:33:00 | 显示全部楼层
那个...楼主千万不要以为我说异常没用
我是说写一些特别小的工具是用不他啊,随手用个简单的if就解决了啊就不用去定义这个那个错误类型了嘛
小程序用异常处理有点不合算啊!!
发表于 2005-7-15 23:35:00 | 显示全部楼层
习惯问题。我反而懒的写if...-_-b
 楼主| 发表于 2005-7-16 07:16:00 | 显示全部楼层
还是晕.现在有重大事件,没有上传.明天才有时间.抱歉了.各位......
 楼主| 发表于 2005-8-3 23:19:00 | 显示全部楼层
来拉.第三篇.....下期将说Java了........


使用try--catch--finally处理异常
应用程序最有可能的途径是合并前面两种错误处理技术----捕获错误,清除并继续执行应用程序。所有你要做的是在处理代码中使用try,catch和finally语句。请看下面的实例:
1:using System
2:
3:class CatchIT
4:{
5:publice static void Main()
6:{
7:try
8:{
9:int nTheZero = 0;
10:int nResult = 10/nTheZero;
11:}
12:catch(DivideByZeroException divEx)
13:{
14:Console.WriteLine(''divide by zero occurred!'');
15:}
16:catch(Exception Ex)
17:{
18:Console.WriteLine(''some other exception'');
19:}
20:finally
21:{
22:}
23:}
24:}
这个例子的技巧是,它包含了多个catch语句。第一个捕获了可能出现的DivideByZeroException异常,而第二个catch语句通过捕获普通异常处理了剩下的异常。
我们肯定总是捕获特定的异常,接着是普通的异常。如果不按这个顺序捕获异常,会发生什么事情呢?看完下面这段代码你也许明白了
例:
1:try
2:{
3:int nTheZero = 0;
4: int nResult = 10/nTheZero;
5:}
6:catch(Exception Ex)
7:{
8:Console.WriteLine(''exception'' + Ex.ToString());
9:}
10:catch(DivideByZeroException divEx)
11:{
12:Console.WriteLine(''never going to see that'');
13:}
编译器将捕获到一个小错误,并类似这样报告该错误:
wrongcatch.cs(10.9): error CS0160: A previous catch clause already
catches all exceptiona of this or a super type (''System.Exception'')


                                                                  C#  结束了.谢谢捧场.下期Java
 楼主| 发表于 2005-7-12 10:55:51 | 显示全部楼层 |阅读模式
C#

结构化异常处理是现代分布试环境下组建设计的一个必要的环节  .NET通用语言运行时从底层构造给予异常处理以坚实的支持.在C#中,异常对象被设计为封装了各种异常信息的类(System.Exception及其继承子类.和接口类似,他被推荐命名时加上后缀''Exception'',但这并非必须.)

除了.NET内部封装的底部异常信息类外,C#处理异常最直接的方法就是利用''try--catch---finally''语句和异常对象来完成异常侦测,异常捕捉和处理等服务.

下面,我们重点讨论C#的异常处理语句:

因为现在在打字出来,所以分章出来.

不过,真的好累啊(为了星迷,再苦再累也没事!!!).
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-5-19 19:38 , Processed in 0.013758 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表