using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//程序流程
//1..执行类对象调用方法A(),跳转到A(),try块调用方法B()
//2..发生异常,首先在被调用的方法B()查找是否有异常处理
//3..没有找到,从栈返回到调用点A(),查找是否有异常处理
//4..没有找到,从栈返回到调用点Main(),查询是否有异常处理
//5..捕获异常,输出异常处理"Catch clause in Main()"
//6..执行"finally“
//7..执行剩下的语句
namespace tyrcatch1
{
class Program
{
static void Main(string[] args)
{
MyClass MCls = new MyClass();
try
{
MCls.A();
}
catch(DivideByZeroException e)
{
Console.WriteLine("Catch clause in Main()");}
finally
{
Console.WriteLine("finally clause in Main()");}
Console.WriteLine("After try statement in Main.");
Console.WriteLine(" ---Keep running.");
Console.ReadKey();
}
}
class MyClass
{
public void A()
{
try //可能导致异常的语句
{
B();//如果B()发生异常则首先在B()代码中查看是否有异常处理程序,如有转到B(),如果没有转到A()
}
catch (System.NullReferenceException)
{ Console.WriteLine("Catch clause in A()"); }
finally
{ Console.WriteLine("Finally clause in A()"); }//不管是否有异常一定会执行
}
void B()
{
int x = 10, y = 0;
try
{
x /= y;
}
catch (System.IndexOutOfRangeException)
{ Console.WriteLine("Catch clause in B()"); }
finally
{ Console.WriteLine("finally clause in B()"); }
}
}
}