处理异常的 try,catch
try 一, 如何:使用 Try/Catch 块捕捉异常
如何:在 Catch 块中使用特定异常发生异常时,异常沿堆栈向上传递,每个 Catch 块都有机会处理它。Catch 语句的顺序很重要。将针对特定异常的 Catch 块放在常规异常 Catch 块的前面,否则编译器可能会发出错误。确定正确 Catch 块的方法是将异常的类型与 Catch 块中指定的异常名称进行匹配。如果没有特定的 Catch 块,则由可能存在的常规 Catch 块捕捉异常。 ? 下面的代码示例使用 try/catch 块捕获 InvalidCastException。该示例创建一个名为 Employee 的类,它带有一个属性:职员级别 (Emlevel)。PromoteEmployee 方法取得对象并增加职员级别。将 DateTime 实例传递给 PromoteEmployee 方法时,发生 InvalidCastException。 ? using System; public class Employee { ?? //Create employee level property. ?? public int Emlevel ?? { ????? get ???????? { ???????? return(emlevel); ???????? } ????? set ???????? { ???????? emlevel = value; ????? ???} ?? } ?? int emlevel; } public class Ex13 { ?? public static void PromoteEmployee(Object emp) ?? { ?? //Cast object to Employee. ?? Employee e = (Employee) emp; ?? // Increment employee level. ?? e.Emlevel = e.Emlevel + 1; ?? } ? ?? public static void Main() ?? { ?? try ????? { ?? Object o = new Employee(); ?? DateTime newyears = new DateTime(2001,1,1); ?? //Promote the new employee. ?? PromoteEmployee(o); ?? //Promote DateTime; results in InvalidCastException as newyears is not an employee instance. ?? PromoteEmployee(newyears); ????? } ?? catch (InvalidCastException e) ????? { ????? Console.WriteLine("Error passing data to PromoteEmployee method. " + e); ????? } ?? } } 三, 如何:显式引发异常可以使用 throw 语句显式引发异常。还可以使用 throw 语句再次引发捕获的异常。较好的编码做法是,向再次引发的异常添加信息以在调试时提供更多信息。 ? 下面的代码示例使用 try/catch 块捕获可能的 FileNotFoundException。try 块后面是 catch 块,catch 块捕获 FileNotFoundException,如果找不到数据文件,则向控制台写入消息。下一条语句是 throw 语句,该语句引发新的 FileNotFoundException 并向该异常添加文本信息。 ? using System; using System.IO; ? public class ProcessFile { ?? public static void Main() ????? { ????? FileStream fs = null; ????? try?? ????? { ???????? //Opens a text tile. ???????? fs = new FileStream(@"C:tempdata.txt",FileMode.Open); ???????? StreamReader sr = new StreamReader(fs); ???????? string line; ? ???????? //A value is read from the file and output to the console. ???????? line = sr.ReadLine(); ???????? Console.WriteLine(line); ????? } ????? catch(FileNotFoundException e) ????? { ???????? Console.WriteLine("[Data File Missing] {0}",e); ???????? throw new FileNotFoundException(@"data.txt not in c:temp directory]",e); ????? } ????? finally ????? { ???????? if (fs != null) ??????????? fs.Close(); ????? } ?? } } 四, 如何:使用 Finally 块异常发生时,执行将终止,并且控制交给最近的异常处理程序。这通常意味着不执行希望总是调用的代码行。有些资源清理(如关闭文件)必须总是执行,即使有异常发生。为实现这一点,可以使用 Finally 块。Finally 块总是执行,不论是否有异常发生。 ? 下面的代码示例使用 try/catch 块捕获 ArgumentOutOfRangeException。Main 方法创建两个数组并试图将一个数组复制到另一个数组。该操作生成 ArgumentOutOfRangeException,同时错误被写入控制台。Finally 块执行,不论复制操作的结果如何。 using System; class ArgumentOutOfRangeExample { ???????? static public void Main() ? { ? int[] array1={0,0}; ? int[] array2={0,0}; ???? try ???? { ???? Array.Copy(array1,array2,-1); ???? } ???? catch (ArgumentOutOfRangeException e) ???? { ???? Console.WriteLine("Error: {0}",e); ???? } ???? finally ???? { ???? Console.WriteLine("This statement is always executed."); ???? } ? } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 基于Vue2.0的分页组件
- mini2440:通过JLink烧写BootLoader到Nor Flash
- ios – 自定义Swift框架不暴露类
- 使用 Storyboard 和 segue 实现 View Controller 数据注入
- objective-c – 如果Protocol方法标记为@required,则在未实
- 如何忽略scanf(“%d”)中的浮点数?
- ruby-on-rails – Rails Actionmailer发送多个收件人
- flex中实现滤镜遮罩效果
- postgresql duplicate key violates unique constraint
- Vue.js实现的表格增加删除demo示例