使用try和catch并finally关键字,再次主要记录一下有些比较特别的异常处理。
示例:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace ExceptionTest 8 { 9 class Program 10 { 11 static void Main() 12 { 13 MyClass my = new MyClass(); 14 try 15 { 16 my.A(); 17 } 18 catch(DivideByZeroException e) 19 { 20 Console.WriteLine("catch in Main"); 21 } 22 finally 23 { 24 Console.WriteLine("finally catch on Main"); 25 } 26 27 Console.ReadKey(); 28 } 29 } 30 class MyClass 31 { 32 public void A() 33 { 34 try 35 { 36 B(); 37 } 38 catch(System.NullReferenceException) 39 { 40 Console.WriteLine("catch ex in A()"); 41 } 42 finally 43 { 44 Console.WriteLine("finally catch in A()"); 45 } 46 } 47 public void B() 48 { 49 int x = 10; 50 int y = 0; 51 try 52 { 53 x /= y; 54 } 55 catch(System.IndexOutOfRangeException) 56 { 57 Console.WriteLine("catch in B()"); 58 } 59 finally 60 { 61 Console.WriteLine("finally in B()"); 62 } 63 } 64 } 65 }
可以看见,在Main捕获A()的异常,在A()捕获的是B()的异常。因此,当执行到B中异常的查找顺序为,按照方法执行的堆栈查找,如下
找到之后,看是执行程序代码,按照正常顺序执行,就是从栈中取B执行,然后取A,最后取Main,执行结果就是这样:
输出结果是:
时间: 2024-10-29 00:38:45