分享
分享赚钱 收藏 举报 版权申诉 / 40

类型第7章—异常处理.ppt

  • 上传人:gnk289057
  • 文档编号:9234010
  • 上传时间:2019-07-30
  • 格式:PPT
  • 页数:40
  • 大小:3.65MB
  • 配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    第7章—异常处理.ppt
    资源描述:

    1、C#语言程序设计,中国地质大学(北京)信息工程学院,辛晓辉,7.1 异常处理概述,7.4 抛出和重发异常,7.2 C#的异常类,7.3 异常的捕获处理,第7章 异常处理,7.5 自定义异常,7.6 checked和unchecked运算符,异常处理,程序错误分为三类: 语法错误:指不符合C#语法规则的程序代码。编译时VS能够自动指出这类错误,并告知错误的位置和原因。一般通过简单的调试处理即可解决; 逻辑错误:由于人为因素导致的错误(如算法设计错误、输入错误等),编译时不会出错,但结果不对。一般需要重新检查程序的执行流程以及算法是否符合要求来解决。 运行错误:往往是由于在程序执行时遇到了一些非法

    2、操作引起的。这类错误在程序编辑和编译时不会被发现,只有在运行时才会发现。程序在运行时发生错误,系统通常会给出一个错误提示信息,然后终止程序的运行。,异常处理,异常:指反常程序事件。 指除用户错误操作之外的、可以预见但无法防范的问题,如:内存不够、文件不存在、网络突然中断等,这些问题正常情况下不发生,但发生时程序会给出提示并中断执行。 “异常处理”的作用就是处理这类事件;,“异常处理”的意义,在程序开发阶段,提醒程序开发人员,及时处理由于计算机硬件、软件系统带来的问题; 在程序使用阶段,提醒用户,说明出现问题的原因; 从软件工程的角度考虑,“异常处理”可以保证程序的健壮性和稳定性。,【例7-0】

    3、 传统程序设计中一般通过if语句进行 “异常处理”。,private void button1_Click(object sender, EventArgs e) int Num1, Num2; double Result;Num1 = Convert.ToInt32(textBox1.Text); Num2 = Convert.ToInt32(textBox2.Text); if (Num2 = 0) textBox3.Text = “除数为零“; else Result = Num1 / Num2; textBox3.Text = Convert.ToString(Result); ,7.

    4、4 抛出和重发异常,7.2 C#的异常类,7.3 异常的捕获处理,第7章 异常处理,7.5 自定义异常,7.6 checked和unchecked运算符,C#的异常类,在C#中,所有的异常都派生于Exception类,该类包含在公共语言运行库中。 该类有如下两个重要的属性。 Message属性:string类型的只读属性,包含了对异常原因的描述。 InnerException属性: Exception类型的只读属性,如果其值为null,则表示当前异常是由系统内部产生的或者根据相关条件直接抛出的。如果其值不为null,则表示当前异常是作为对另一个异常的回答而被抛出的,产生当前异常的异常可以在In

    5、nerException属性中得到。,C#的通用异常类,C#的通用异常类,C#的通用异常类,7.1 异常处理概述,7.4 抛出和重发异常,7.2 C#的异常类,7.3 异常的捕获处理,第7章 异常处理,7.5 自定义异常,7.6 checked和unchecked运算符,异常的捕获处理,C#中,对异常的捕获处理通过trycatchfinally语句 来进行。语句的格式为:try 语句组1; catch(异常1) 语句组2; catch(异常n) 语句组n; finally 语句组n+1; ,程序中需要执行的语句,发生了“异常1”指定的异常时执行,发生了“异常n”指定的异常时执行,必做的自理,该

    6、语句块一定被执行,无论是否产生异常,异常的捕获处理,try 块: 包含程序中可能发生异常的代码。 一旦在try块中有某一条语句执行时产生异常,程序立即转向执行相应catch块中的代码,而不会再执行该语句后面的其他语句。 当然,如果try块中的语句都不产生异常,那么就不会有任何的catch块被执行。,异常的捕获处理,catch块: 包含的是出现异常时要执行的代码。 一个try后面可以有零个或多个catch块。 catch后面括号放入希望捕获的异常类型。 当有多个catch块时,要先列举在异常继承体系结构中最具体的类型,最后才列举Exception。否则会出现语法错误。,异常的捕获处理,final

    7、ly块: 包含了一定要执行的代码,通常是一些资源释放,关闭文件等代码。,异常的捕获处理,说明: 当异常发生时,选择哪一个catch块将取决于异常的类型是否匹配,一个具体的catch块将比一个公共的catch块优先。如在try块中发生了一个除数为0的异常,有两个catch块,一个是捕获所有异常,一个是专门捕获除数为0的异常,此时应执行“专门捕获除数为0的异常”的catch块。 可以省略catch块。此时,若程序发生异常,如果有finally块则将直接执行该块中的代码,否则将直接中断。 finally块也可以省略。但catch块和finally块不能同时省略。,【例7-1】异常处理举例。 编写一个

    8、除法计算器,界面如下图所示。程序运行时,输入被除数和除数后单击【计算】按钮将会把运算结果显示在【结果】文本框中。要求程序能够捕获到除数为零的异常(只对整数和Decimal数产生,对于实数结果为无穷大)、输入数据格式不正确的异常及其他所有异常。,private void button1_Click(object sender, EventArgs e) int Num1, Num2; /存放被除数和除数double Result; /结果try /把textBox1中的输入转换为整型作为被除数Num1 = Convert.ToInt32(textBox1.Text);/把textBox2中的输入

    9、转换为整型作为除数Num2 = Convert.ToInt32(textBox2.Text); Result = Num1 / Num2; /除法运算/除法的结果显示出来 textBox3.Text = Convert.ToString(Result); ,/捕获除数为0的异常 catch (DivideByZeroException e1) textBox3.Text = “除数为0“; /捕获数据格式不正确的异常 catch (FormatException e2) textBox3.Text = “除数或被除数中出现非数字字符“; /捕获所有其他异常catch (Exception e3

    10、) /也可直接写为:catch MessageBox.Show(e3.Message, “异常信息对话框“,MessageBoxButtons.OK, MessageBoxIcon.Information);textBox3.Text = “其他异常“; ,说明: 一般在处理异常时,使用若干个catch块把感兴趣的异常处理完,再用一个catch块处理剩余的其他异常,此时catch块中的变量应是“Exception”类的变量,因为所有的异常由该类派生。 也可以通过使用不加括号和参数的catch语句来捕获try块中的所有异常。,7.1 异常处理概述,7.4 抛出和重发异常,7.2 C#的异常类,7

    11、.3 异常的捕获处理,第7章 异常处理,7.5 自定义异常,7.6 checked和unchecked运算符,抛出异常,在C#中除了程序产生异常外,用户还可以为了某种应用目的自己产生并抛出异常。 抛出异常使用throw语句,有两种格式:格式1:throw ; /把接受到的异常直接抛出格式2:throw 异常对象; /抛出“异常对象”指定的异常,【例7-2】抛出异常举例。 在“除法计算器”中对输入的除数进行判断,如果除数为0则主动抛出“除数为0”的异常。“除数为0”时的程序运行界面如下图所示。,private void button1_Click(object sender, EventArgs

    12、 e) int Num1, Num2; /存放被除数和除数double Result; /结果try Num1 = Convert.ToInt32(textBox1.Text);Num2 = Convert.ToInt32(textBox2.Text); if (Num2 = 0)throw new DivideByZeroException(“除数为0,请重新输入!“);else Result = Num1 / Num2; textBox3.Text = Convert.ToString(Result); catch (DivideByZeroException e1) textBox3.T

    13、ext = e1.Message; catch /捕获其他异常 textBox3.Text = “其他异常“; ,重发异常,当发生异常后,可以在catch语句中对异常进行捕获,然后进行处理,在处理过程中还可以通过throw语句把异常重发给调用者。,【例7-3】异常重发举例。 用函数实现除法计算器的功能。如果发现除数为0,则结果默认为整数的最大值。同时程序显示出“执行结果不可靠”的提示信息。程序的运行界面如下图所示。,public void divop() int Num1, Num2; /存放被除数和除数double Result; /结果try Num1 = Convert.ToInt32(

    14、textBox1.Text);Num2 = Convert.ToInt32(textBox2.Text); Result = Num1 / Num2; textBox3.Text = Convert.ToString(Result); catch (DivideByZeroException e1) /捕获除数为0的错误textBox3.Text = Convert.ToString(Int32.MaxValue); throw e1; /重发异常 ,private void button1_Click(object sender, EventArgs e) trydivop(); /调用函数

    15、catch (Exception e2) /捕获来自函数重发的异常MessageBox.Show(e2.Message, “异常对话框“); ,注意:无参数的throw 语句只能在catch子句中使用。,7.1 异常处理概述,7.4 抛出和重发异常,7.2 C#的异常类,7.3 异常的捕获处理,第7章 异常处理,7.5 自定义异常,7.6 checked和unchecked运算符,自定义异常,系统提供的异常类也许不能很好地满足我们的需要,此时可以根据需要定义自己的异常类; 自定义的异常类必须继承已有的异常类。,【例7-4】定义和使用用户自定义异常。 首先定义一个student类,该类包含两个私

    16、有字段:name和score,分别表示学生姓名和成绩,且name的长度不超过8个字节,score的范围为0,100;另外还包含一个方法成员setInfo (),用于设置name和score。 然后自定义一个异常类UserException,当对name所赋的值的长度超过8个字节或者对score所赋的值不在0,100范围内时都抛出此自定义异常。,class UserException : Exception /定义用户的异常类 /UserException类的构造函数public UserException() public UserException(string ms):base(ms) p

    17、ublic UserException(string ms,Exception inner) : base(ms,inner) ,class student /定义学生类 private string name; /姓名,长度不超过8个字节private double score; /成绩,范围为0,100public void setInfo(string name, double score) if (name.Length 8) throw (new UserException(“姓名长度超过了8个字节!“);if (score 100)throw (new UserException(

    18、“非法的分数!“);this.name = name;this.score = score; ,static void Main(string args) student s = new student();try s.setInfo(“张三“, 958.5);catch (Exception e)Console.WriteLine(“产生异常:0“, e.Message);Console.Read (); ,7.1 异常处理概述,7.4 抛出和重发异常,7.2 C#的异常类,7.3 异常的捕获处理,第7章 异常处理,7.5 自定义异常,7.6 checked和unchecked运算符,che

    19、cked和unchecked运算符的用法,checked运算符的格式与功能如下: 格式:checked(整型算术表达式) 功能:对“整型算术表达式”的运算结果进行溢出检查,如果发生溢出将产生溢出异常。,unchecked运算符的格式与功能如下: 格式: unchecked(整型算术表达式) 功能:对“整型算术表达式”的运算结果不作溢出检查,溢出时也不产生溢出异常,只是结果被截短。,checked和unchecked运算符的用法,【例7-5】 checked和unchecked运算符使用举例。,题目:编写一个计算器应用程序,要求在程序中能够 捕获到被0除的异常与算出运算溢出的异常。程序运行界面如下所示:,综合练习,谢谢,休息一下!,

    展开阅读全文
    提示  道客多多所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:第7章—异常处理.ppt
    链接地址:https://www.docduoduo.com/p-9234010.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    道客多多用户QQ群:832276834  微博官方号:道客多多官方   知乎号:道客多多

    Copyright© 2025 道客多多 docduoduo.com 网站版权所有世界地图

    经营许可证编号:粤ICP备2021046453号    营业执照商标

    1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png



    收起
    展开