异常处理的一般代码模式
try { //可能发生异常的代码 //当try中某行代码发生异常后,从该行代码开始,后面的代码都不会继续执行, //程序直接跳转到catch块中进行执行 } catch (Exception ex) { Console.WriteLine(ex.Message);//可以看到异常的原因 //对异常的处理 throw;//继续向上抛出异常 } finally { //不管是否发生异常都会执行 }
atch块的几种写法
try { int n = 10, m = 0; int r = n / m; Console.WriteLine(r); } ////第一种:这种写法可以捕获try块中的所有异常 //catch //{ // Console.WriteLine("发生一场了!"); // //throw; //} ////第二种: //catch(Exception ex) //{ // Console.WriteLine("发生异常了!"); // Console.WriteLine(ex.Message);//发生异常的消息 // Console.WriteLine(ex.Source);//那个对象中发生异常 // Console.WriteLine(ex.StackTrace);//异常相关信息(那个位置第几行第几列) //} //第三种:对不同的异常,使用不同的方式开处理(使用多个不同的catch块来捕获异常) catch(NullReferenceException e) { //空指针异常 Console.WriteLine("空指针异常:{0}",e.Message); } catch(DivideByZeroException e) { //除数为0的异常 Console.WriteLine("除数为0的异常,详细信息:{0}",e.StackTrace); } catch(ArgumentException e) { //参数异常 Console.WriteLine("参数异常,详细信息:{0}",e.StackTrace); } catch(Exception e) { //捕获其余所有的异常 Console.WriteLine(e.StackTrace); } finally { Console.WriteLine("finally中的代码!!"); } Console.ReadKey();
手动抛出异常及使用throw继续向上抛出异常
static void Main(string[] args) { #region 手动抛出异常 //while (true) //{ // //尽量使用逻辑判断来避免异常处理代码 // try // { // Console.WriteLine("请输入一个人名"); // string name = Console.ReadLine(); // if (name == "超哥") // { // //手动抛出异常 // throw new Exception("姓名不合法!"); // } // else // { // Console.WriteLine("姓名合法:{0}", name); // } // } // catch (Exception ex) // { // Console.WriteLine("发生异常了!!"); // Console.WriteLine(ex.Message); // Console.WriteLine(ex.StackTrace); // } //} #endregion #region 异常 M2(); Console.ReadKey(); #endregion } static void M2() { Console.WriteLine("==========="); Console.WriteLine("==========="); try { M1(); } catch (Exception) { Console.WriteLine("M1方法发生异常了!"); throw; } Console.WriteLine("==========="); Console.WriteLine("==========="); } static void M1() { try { int n = 10, m = 0; int r = n / m; Console.WriteLine("结果是:{0}", r); } catch (Exception) { Console.WriteLine("捕获了该异常并且已经做了相观的处理!"); //再catch中使用throw;语句,并且这种用法只能用在catch块中 //throw:表示将当前异常继续向上抛出。 throw; } }