第9章-异常 处理改_第1页
第9章-异常 处理改_第2页
第9章-异常 处理改_第3页
第9章-异常 处理改_第4页
第9章-异常 处理改_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、序列化与反序列化序列化与反序列化文件类文件类目录类目录类static void Main() string fileName = Console.ReadLine(); FileStream fs = new FileStream(fileName, FileMode.Create); BinaryWriter w = new BinaryWriter(fs) ; string teaNo = Console.ReadLine(); string teaName = Console.ReadLine(); int teaAge = Convert.ToInt32(Console.ReadLin

2、e(); if(teaName = “mary”) w.Write(teaNo); w.Write(teaName); w.Write(teaAge); w.Close() ;fs.Close();程序片段是否有问题?程序片段是否有问题?调式与异常处理调式与异常处理程序的调试程序的调试异常处理异常处理static void Main() StreamWriter s = new StreamWriter(f:1.txt); s.WriteLine(“welcome); s.Close();语法错误。语法错误。static void Main() StreamWriter s = new Str

3、eamWriter(“f:t1.txt”); s.WriteLine(“welcome); s.Close();运行错误。运行错误。 在开发大型项目中,程序的调试是一个漫长的过程。在开发大型项目中,程序的调试是一个漫长的过程。 语法错误:语法错误发生在语句没有适当构造、关键字语法错误:语法错误发生在语句没有适当构造、关键字 被拼错或标点被忽略的时候。被拼错或标点被忽略的时候。 运行时错误:运行时错误发生在程序试图完成一个操运行时错误:运行时错误发生在程序试图完成一个操作,但它在运行时不被允许。作,但它在运行时不被允许。 项目开发时,代码中异常陷阱无处不在,如数据库连接项目开发时,代码中异常陷阱

4、无处不在,如数据库连接失败、失败、IO错误、数据溢出、数组下标越界等时常发生。再错误、数据溢出、数组下标越界等时常发生。再熟练的程序员也不能说自己编写的代码没有任何问题。熟练的程序员也不能说自己编写的代码没有任何问题。static void Main() string fileName=“”; filrName=Console.ReadLine(); string line; StreamReader s = new StreamReader(fileName); line=s.ReadLine(); s.Close();如果输入错误呢?就应该提示输入错误,并且重新输入。如果输入错误呢?就应该

5、提示输入错误,并且重新输入。while (true) filename = Console.ReadLine(); if (File.Exists(filename) break; else Console.WriteLine(wrong,input again); continue; 对于编程人员来说,可以添加对于编程人员来说,可以添加if语句,判断文件路径是否语句,判断文件路径是否输入正确,但是这样太辛苦,而且编程人员有时无法考虑输入正确,但是这样太辛苦,而且编程人员有时无法考虑的很周全。所以的很周全。所以C#中,提出中,提出“异常异常”机制,来帮你管理,机制,来帮你管理,减轻编程人员的工

6、作。减轻编程人员的工作。9.2 异常处理结构异常处理结构 C#允许我们编写代码,捕获异常事件,并作相应的处允许我们编写代码,捕获异常事件,并作相应的处理,然后让程序继续执行,这就是理,然后让程序继续执行,这就是C#的异常处理机制。的异常处理机制。 C#提供了各种异常类来处理不同的异常,所有的异常提供了各种异常类来处理不同的异常,所有的异常类均继承于类均继承于System.Exception。C#的异常类的异常类9.2.1 try-catch结构结构try unsafe statementcatch (ExceptionType1 ex) catch (ExceptionTypeN ex) 注意

7、:注意:1.将会出现问题的代码放在将会出现问题的代码放在try语句块内。语句块内。2.try语句块必需跟一个或多个语句块必需跟一个或多个catch语句块。语句块。3.每个每个catch代码段声明其能处理的一种特定类型的异常,并进行处理。代码段声明其能处理的一种特定类型的异常,并进行处理。4.如果如果try中产生异常,则立刻跳转到第一个匹配的中产生异常,则立刻跳转到第一个匹配的catch代码段处理。从异代码段处理。从异常层次结构上,通常将子类异常写在前,父类异常写后面的常层次结构上,通常将子类异常写在前,父类异常写后面的catch语句中。语句中。5.程序无论是否捕获异常,都将从最后一个程序无论是

8、否捕获异常,都将从最后一个catch后继续执行。后继续执行。static void Main() string fileName=“”; string line; filrName=Console.ReadLine(); StreamReader s = new StreamReader(filename); line=s.ReadLine(); s.Close();如果输入错误呢?就应该提示输入错误,并且重新输入。如果输入错误呢?就应该提示输入错误,并且重新输入。 string filename; string line; try filename = Console.ReadLine();

9、 StreamReader s = new StreamReader(filename); line = s.ReadLine(); s.Close(); catch( Exception e ) Console.WriteLine(wrong,input again); string filename; string line; while (true) try filename = Console.ReadLine(); StreamReader s = new StreamReader(filename); line = s.ReadLine(); s.Close(); break; c

10、atch(Exception e) Console.WriteLine(wrong,input again); continue; 示例示例2static void Main() string fileName = Console.ReadLine(); FileStream fs = new FileStream(fileName, FileMode.Create); BinaryWriter w = new BinaryWriter(fs) ; string teaNo = Console.ReadLine(); string teaName = Console.ReadLine(); i

11、nt teaAge = Convert.ToInt32(Console.ReadLine(); if(teaName = “mary”) w.Write(teaNo); w.Write(teaName); w.Write(teaAge); w.Close() ;fs.Close();DirectoryNotFoundExceptionFormatException修改后的程序修改后的程序try string fileName = Console.ReadLine(); FileStream fs = new FileStream(fileName, FileMode.Create); Bina

12、ryWriter w = new BinaryWriter(fs) ; string teaNo = Console.ReadLine(); string teaName = Console.ReadLine(); int teaAge = Convert.ToInt32(Console.ReadLine(); w.Close(); fs.Close(); catch(DirectoryNotFoundException)Console.WriteLine(“不存在该目录不存在该目录”);catch(FormatException)Console.WriteLine(“格式错误格式错误”);c

13、atch(Exception e)Console.WriteLine(“其他错误其他错误”);思考:当控制台输入思考:当控制台输入d:f1.txt1MaryAb时,程序是否有问题?时,程序是否有问题?9.2.2 try-catch-finally结构结构try unsafe statementcatch (ExceptionType1 ex) catch (ExceptionTypeN ex) finally注意:注意:1.无论程序是否发生异常,无论程序是否发生异常,finally结构都将执行。结构都将执行。2.Finally结构通常用于进行文件的关闭,内存的释放,垃圾的回收等。结构通常用于进

14、行文件的关闭,内存的释放,垃圾的回收等。改进后的程序改进后的程序tryif (teaName.Trim() = mary) w.Write(teaNo); w.Write(teaName); w.Write(teaAge); catch(DirectoryNotFoundException)Console.WriteLine(“不存在该目录不存在该目录”);catch(FormatException)Console.WriteLine(“格式错误格式错误”);catch(Exception e)Console.WriteLine(“其他错误其他错误”);finally if(w!=null)

15、w.Close(); if(fs!=null) fs.Close();思考:假设用户输入的年龄为思考:假设用户输入的年龄为150,希望程序能当成错误的数,希望程序能当成错误的数据处理,并引发异常。该如何据处理,并引发异常。该如何处理?处理?9.4.1 主动引发异常主动引发异常在某些情况下,程序代码需要主动引发异常,以便向用户报告错误。在某些情况下,程序代码需要主动引发异常,以便向用户报告错误。语法:语法:try if (条件条件) /一般用一般用if语句中语句中 throw new ExceptionType();catch(ExceptionType e) 处理该异常处理该异常改进后的程序改

16、进后的程序try string fileName = Console.ReadLine(); FileStream fs = new FileStream(fileName, FileMode.Create); BinaryWriter w = new BinaryWriter(fs) ; string teaNo = Console.ReadLine(); string teaName = Console.ReadLine(); int teaAge = Convert.ToInt32(Console.ReadLine(); if(teaAge45) throw new ArgumentOu

17、tOfRangeException(); if(teaName = “mary”) w.Write(teaNo); w.Write(teaName); w.Write(teaAge); w.Close() ;catch (DirectoryNotFoundException) Console.WriteLine(不存在该目录不存在该目录); catch (FormatException) Console.WriteLine(格式错误格式错误); catch(ArgumentOutOfRangeException) Console.WriteLine(年龄在年龄在15-45之间之间);catch

18、 (Exception e) Console.WriteLine(其他错误其他错误); finally if(w!=null) w.Close(); if(fs!=null) fs.Close();9.5 使用异常的指导原则使用异常的指导原则 异常处理时提高程序可靠性的重要手段,但它也会增加编程的工异常处理时提高程序可靠性的重要手段,但它也会增加编程的工作量,同时造成程序性能下降。例如,在程序不出错的情况下,常作量,同时造成程序性能下降。例如,在程序不出错的情况下,常规代码段的运行效率明显要高于将其放在规代码段的运行效率明显要高于将其放在try代码段中的运行效率。代码段中的运行效率。因此,开发

19、人员需要根据具体情况来确定异常的使用时机和范围。因此,开发人员需要根据具体情况来确定异常的使用时机和范围。try unsafe(); 输出输出T1; catch (IOException e) 输出输出T2; catch 输出输出T3;finally 输出输出T4; 输出输出T5;程序正常执行程序正常执行出现出现IOIO异常且被捕获异常且被捕获出现异常但没有被出现异常但没有被IOIO捕获捕获catchcatch中有中有returnreturn语句语句catchcatch中有中有exitexit语句语句在开发大型项目中,程序的调试是一个漫长的过程。在程在开发大型项目中,程序的调试是一个漫长的过程。在程序中发生的错误的类型有三种。它们是:序中发生的错误的类型有三种。它们是: 语法错误:语法错误发生在语句没有适当构造、关键字语法错误:语法

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论