设为首页收藏本站【C#】第四章 异常处理与调测
繁体中文

单小喏中文网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

单小喏中文网欢迎你的光临!!!
查看: 1235900|回复: 0

【C#】第四章 异常处理与调测

[复制链接]

85

主题

89

帖子

1246

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1246

来自- 安徽合肥

扫一扫,手机访问本帖
发表于 2014-3-24 22:46:26 | 显示全部楼层 |阅读模式
在第三章所做练习,让用户输入2个数值执行运算的过程中,当用户输入不是数值时,我们的程序将会出错。我们无法去决定和控制用户输入的是否一定是数值,所以要对这些等一系列可能出现的错误进行处理。

异常,简单来说,异常就是错误(为了方便与大家理解异常,下面异常名词全部用错误代替)。异常在编程中一般分为:
1、语法错误。例如
[C#] 纯文本查看 复制代码
int i;
int i;//已经定义的变量,再次定义会报错


再例如
[C#] 纯文本查看 复制代码
int i;
I=1;//未定义大写变量I
//丢掉分号、括号等等一系列。


对于这些错误,VS会帮我们去检查,检测不到的可以使用编译快捷(ctrl+shift+b)键帮我们去检测,然后去处理
2、运行时错误
编译没有问题,运行也没有问题,但是用户输入或执行一定的操作,会让我们的程序出现错误,比如前面接收用户输入的内容,然后执行运算。用户输入的不是数值程序出错。一般需要我们编写代码来进行处理的就是运行时错误(或者说我们能够处理的也只有运行时错误)。处理的方式
try{
/*
可能出现运行时错误的语句
*/
}
catch(Exception e){
/*
我们的处理错误语句
*/
}
示例代码:
[C#] 纯文本查看 复制代码
 try
            {
                Console.Write("请输入一个数值:");
                string temp = Console.ReadLine();
                float temp1 = Convert.ToSingle(temp);
            }catch(Exception e){//需要看下具体出错的信息,在这里用变量e来保存
                //Console.WriteLine(e.Message);//获取系统给出的错误信息
                Console.WriteLine("抱歉,亲爱的用户,请输入数字,不是数字无法进行处理");//自定义的错误信息
            }


有的时候,对这些运行时错误,不想进行处理,然后又不影响我们程序的执行。看原始代码
[C#] 纯文本查看 复制代码
Console.Write("请输入一个数值:");
                string temp = Console.ReadLine();
                float temp1 = Convert.ToSingle(temp);
            Console.WriteLine("后面程序执行");//该行的代码出错时受影响不会继续的执行


再来看看下面修改后的代码
[C#] 纯文本查看 复制代码
try
            {
                Console.Write("请输入一个数值:");
                string temp = Console.ReadLine();
                float temp1 = Convert.ToSingle(temp);
            }
            finally
            {
                Console.WriteLine("后面程序执行可以执行");//想要后面的代码不受影响还会继续的执行,放到这里
            }
            Console.WriteLine("后面程序执行");//这里的代码还是不能执行


还有一种情况是这样的,在catch语句中不进行处理,我想抛给别人(调用者)进行处理,所有人都不处理,程序出错
[C#] 纯文本查看 复制代码
try
            {
                Console.Write("请输入一个数值:");
                string temp = Console.ReadLine();
                float temp1 = Convert.ToSingle(temp);
            }
            catch{
                throw;//抛出错误,由调用者进行处理,所有的调用者都不处理,最终程序报错
            }
            Console.WriteLine("后面程序执行");//这里的代码还是不能执行


另外,为更深层次的运行时异常处理做个抛砖引玉
[C#] 纯文本查看 复制代码
try
            {
                Console.Write("请输入一个数值:");
                string temp = Console.ReadLine();
                float temp1 = Convert.ToSingle(temp);
            }
            catch (FormatException e)
            {//如果想要指定出错的类型抛给调用者进行处理,可以用这种方法。并且,所有出错的类型都比Exception小,先处理小的再处理大的。先处理大的,后面小的错误将无法处理
                throw e;//抛出错误,由调用者进行处理,所有的调用者都不处理,最终程序报错
            }
            Console.WriteLine("后面程序执行");//这里的代码还是不能执行


PS:fillay语句和try、catch语句可以结合使用,程序就比较完美了。并且多条语句可以使用外侧代码功能自定帮我们进行处理
异常处理与调测.jpg

3、逻辑错误
我们的程序可以运行,并且没有语法错误,但是运行的结果不是我们想要的。
[C#] 纯文本查看 复制代码
            int i=0;//在前面逻辑处理的过程中,变量i的值为0,但是我们想要的结果为大于的0结果
            if (i>0)
            {
                Console.WriteLine(">0");
            }
            else
            {
                Console.WriteLine("<=0");
            }
            //我们的程序可以运行,并且没有语法错误


这类错误处理起来是最麻烦的,需要有一定的代码处理和调测经验。
解决逻辑错误的办法,在可能出现错误的语句前(最好是前一句)设置断点,然后按F5(启动调试)来运行程序,
程序运行到断点时会暂停,这时候按F10(逐语句)可以看到程序执行的过程,变量悬停都可以看到值提示。
异常处理与调测.jpg

在执行到某一条语句中,如果有其他很复杂的功能逻辑,想查看这个复杂的功能逻辑怎么去实现的,可以使用快捷键
F11(逐过程)
异常处理与调测.jpg

如果在其他页面源码中也添加的断点,也可以删除所有页面源码的断点
异常处理与调测.jpg
本文章来源于:学玩网



上一篇:【C#】第三章(2) 流程控制之循环结构
下一篇:【C#】第五章 值类型枚举与引用类型数组

帖子地址: 



+1
1235900°C
沙发哦 ^ ^ 马上
*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

 
发评论,即可赢取积分欧!

申请友链|意见反馈|小黑屋|手机版|Archiver|单小喏中文网 ( 皖ICP备13012632号-1 |网站地图  

GMT+8, 2016-12-8 17:49 , Processed in 0.263949 second(s), 51 queries .

Powered by danxiaonuo

© 2013-2016 danxiaonuo.

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