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

下载本文档

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

文档简介

1回顾序列化与反序列化文件类目录类思考:2staticvoidMain(){stringfileName=Console.ReadLine();

FileStream

fs=newFileStream(fileName, FileMode.Create);

BinaryWriterw=newBinaryWriter(fs);stringteaNo=Console.ReadLine();stringteaName=Console.ReadLine();

int

teaAge= Convert.ToInt32(Console.ReadLine());

if(teaName==“mary”){

w.Write(teaNo);

w.Write(teaName);

w.Write(teaAge);}

w.Close();fs.Close();}程序片段是否有问题?第9章

调式与异常处理44目标程序的调试异常处理引例15staticvoidMain(){

StreamWriters=newStreamWriter("f:\1.txt");s.WriteLine(“welcome");s.Close();}语法错误。staticvoidMain(){

StreamWriters=newStreamWriter(“f:\\t\\1.txt”);s.WriteLine(“welcome");s.Close();}运行错误。程序调试6在开发大型项目中,程序的调试是一个漫长的过程。语法错误:语法错误发生在语句没有适当构造、关键字被拼错或标点被忽略的时候。

运行时错误:运行时错误发生在程序试图完成一个操作,但它在运行时不被允许。项目开发时,代码中异常陷阱无处不在,如数据库连接失败、IO错误、数据溢出、数组下标越界等时常发生。再熟练的程序员也不能说自己编写的代码没有任何问题。引例27staticvoidMain(){stringfileName=“”;

filrName=Console.ReadLine();stringline;

StreamReaders=newStreamReader(fileName);

line=s.ReadLine();s.Close();}如果输入错误呢?就应该提示输入错误,并且重新输入。引例28while(true){filename=Console.ReadLine();if(File.Exists(filename)){break;}else{Console.WriteLine("wrong,inputagain");continue;}}对于编程人员来说,可以添加if语句,判断文件路径是否输入正确,但是这样太辛苦,而且编程人员有时无法考虑的很周全。所以C#中,提出“异常”机制,来帮你管理,减轻编程人员的工作。9.2异常处理结构C#允许我们编写代码,捕获异常事件,并作相应的处理,然后让程序继续执行,这就是C#的异常处理机制。

C#提供了各种异常类来处理不同的异常,所有的异常类均继承于System.Exception。C#的异常类9.2.1try-catch结构try{unsafestatement}catch(ExceptionType1ex){……}catch(ExceptionTypeNex){……}…注意:1.将会出现问题的代码放在try语句块内。2.try语句块必需跟一个或多个catch语句块。3.每个catch代码段声明其能处理的一种特定类型的异常,并进行处理。4.如果try中产生异常,则立刻跳转到第一个匹配的catch代码段处理。从异常层次结构上,通常将子类异常写在前,父类异常写后面的catch语句中。5.程序无论是否捕获异常,都将从最后一个catch后继续执行。引例112staticvoidMain(){stringfileName=“”;stringline;

filrName=Console.ReadLine();

StreamReaders=newStreamReader(filename);

line=s.ReadLine();s.Close();}如果输入错误呢?就应该提示输入错误,并且重新输入。示例113stringfilename;stringline;

try{filename=Console.ReadLine();StreamReaders=newStreamReader(filename);line=s.ReadLine();

s.Close();

}catch(Exceptione

){Console.WriteLine("wrong,inputagain");

}示例114stringfilename;stringline;

while(true){try{filename=Console.ReadLine();StreamReaders=newStreamReader(filename);line=s.ReadLine();

s.Close();break;}catch(Exceptione){Console.WriteLine("wrong,inputagain");

continue;}}

示例2staticvoidMain(){stringfileName=Console.ReadLine();

FileStream

fs=newFileStream(fileName, FileMode.Create);

BinaryWriterw=newBinaryWriter(fs);stringteaNo=Console.ReadLine();stringteaName=Console.ReadLine();

int

teaAge= Convert.ToInt32(Console.ReadLine());

if(teaName==“mary”){

w.Write(teaNo);

w.Write(teaName);

w.Write(teaAge);}

w.Close();fs.Close();}DirectoryNotFoundExceptionFormatException修改后的程序try{stringfileName=Console.ReadLine();

FileStream

fs=newFileStream(fileName, FileMode.Create);

BinaryWriterw=newBinaryWriter(fs);stringteaNo=Console.ReadLine();stringteaName=Console.ReadLine();

int

teaAge=Convert.ToInt32(Console.ReadLine());…

w.Close();fs.Close();}catch(DirectoryNotFoundException){Console.WriteLine(“不存在该目录”);}catch(FormatException){Console.WriteLine(“格式错误”);}catch(Exceptione){Console.WriteLine(“其他错误”);}思考:当控制台输入d:\\f1.txt1MaryAb时,程序是否有问题?9.2.2try-catch-finally结构try{unsafestatement}catch(ExceptionType1ex){……}catch(ExceptionTypeNex){……}finally{…}注意:1.无论程序是否发生异常,finally结构都将执行。2.Finally结构通常用于进行文件的关闭,内存的释放,垃圾的回收等。改进后的程序try{…

if(teaName.Trim()=="mary"){w.Write(teaNo);w.Write(teaName);w.Write(teaAge);}}catch(DirectoryNotFoundException){Console.WriteLine(“不存在该目录”);}catch(FormatException){Console.WriteLine(“格式错误”);}catch(Exceptione){Console.WriteLine(“其他错误”);}finally{if(w!=null)w.Close();if(fs!=null)fs.Close();}思考:假设用户输入的年龄为150,希望程序能当成错误的数据处理,并引发异常。该如何处理?9.4.1主动引发异常在某些情况下,程序代码需要主动引发异常,以便向用户报告错误。语法:try{ if(条件)//一般用if语句中

thrownew

ExceptionType();}catch(ExceptionTypee){

处理该异常}改进后的程序try{stringfileName=Console.ReadLine();

FileStream

fs=newFileStream(fileName, FileMode.Create);

BinaryWriterw=newBinaryWriter(fs);stringteaNo=Console.ReadLine();stringteaName=Console.ReadLine();

int

teaAge= Convert.ToInt32(Console.ReadLine());

if(teaAge<15||teaAge>45)thrownewArgumentOutOfRangeException();

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(Exceptione){Console.WriteLine("其他错误");}finally{if(w!=null)w.Close();if(fs!=null)fs.Close();}9.5使用异常的指导原则

异常处理时提高程序可靠性的重要手段,但它也会增加编程的工作量,同时造成程序性能下降。例如,在程序不出错的情况下,常规代码段的运行效率明显要高于将其放在try代码段中的运行效率。因此,开发人员需要根据具体情况来确定异常的使用时机和范围。练习1:22try{unsafe();

输出T1;}catch(IOExceptione){

输出T2;}catch{

输出T3;}finally{

输出T4;}

输出T5;程序正常执行出现IO异常且被捕获出现异常但没有被IO捕获catch

温馨提示

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

评论

0/150

提交评论