异常是在程序执行期间出现的问题。C# 中的异常是对程序运行时出现的特殊情况的一种响应,比如尝试除以零。
class Program { static void Main(string[] args) { System.IO.File.Delete(@"F:output.txt"); System.IO.File.Delete(@"F:面向对象2.exe"); System.IO.File.Delete(@"F:input.txt"); Console.ReadKey(); } }
上述代码中,若面向对象2.exe文件被打开,程序执行时会抛异常,我们会发现output.exe已经被删除,但是input.exe并未被删除,可见异常产生时,异常代码前面的代码会被执行,后面的不会被执行,为了处理异常产生,采用try,catch关键词。
class Program { static void Main(string[] args) { System.IO.File.Delete(@"F:output.txt"); /*如果try中的代码执行发生异常,直接执行catch中的代码会被执行,catch之后的代码会继续往下执行 * 如果不加try-catch,代码执行抛出异常后,后面的代码不会继续执行 */ try { System.IO.File.Delete(@"F:面向对象2.exe"); } catch { Console.WriteLine("删除失败"); } System.IO.File.Delete(@"F:input.txt"); Console.ReadKey(); } }
运行面向对象2.exe文件,当代码被编译时,输出结果为“删除失败”,但是output.txt和input.txt文件均成功被删除,面向对象2.exe文件未被删除。可见当执行try失败后,直接运行catch及catch后续的代码。
但是在上述代码执行时,我们并不知道异常的原因,采用下列代码可以弹出异常原因
try { System.IO.File.Delete(@"F:面向对象2.exe"); } catch(Exception error) { Console.WriteLine("删除失败,错误为{0}",error.Message);//可以显示异常原因 }
在catch()中加入Exception xx,可以在运行结果中弹出抛异常的原因,结果截图如下
不要随意地使用try catch,异常是一种“未考虑的情况”,尽量不要靠try catch来实现正常的逻辑,程序员应该要自身完善程序的逻辑性,避免出现异常。可以抓取某一类异常,例如
catch(FileNotFoundException ex) { Console.WriteLine("读取文件不存在,错误为{0}",ex.Message); }
try finally,无论try中的语句有无成功执行,finally中的语句在最后都会被执行,可以用try catch... finally。
2018.08.07