我一直在阅读过去几个小时的例外情况并且有基本的了解。然而,在展示编码方面时,我正在阅读的这本书并没有得到最好的例子。我知道如果我有可能失败的代码,我将它包装在try块中,并特别捕获异常,即FormatException等。
然而令人困惑的部分是,当谈到调用堆栈时,例如方法A调用方法B而方法B调用方法C等。
例如,在方法c中发生异常,但是它没有一个catch处理程序,所以它传播回调用方法,因此第四,直到处理异常的方式。
我想知道的是,在导致错误的方法中继续执行还是在处理错误的方法中继续执行。
任何基本的例子都会很棒。
答案 0 :(得分:1)
我不会重复其他答案已经说过的内容,但另外要指出的是,任何 finally 块将在 {{1}之后执行语句发生,但之前异常被重新抛出堆栈。换句话说, finally 块从堆栈顶部向下执行。
例如:
catch
将输出 First ,然后 Second , Third , Fourth 。
答案 1 :(得分:0)
我想知道的是,在导致错误的方法中继续执行还是在处理错误的方法中继续执行。
第二个是正确的。例如,在您的B
方法中,如果抛出异常但未处理,则会转到调用方法,例如A
,如果A
处理该异常异常程序将继续从该方法执行。考虑这个例子:
private static void Main(string[] args)
{
A();
}
static void A()
{
try
{
B();
}
catch (Exception ex)
{
Console.WriteLine("Exception is thrown by {0} method and handled in A method.",ex.TargetSite);
}
Console.WriteLine("We are still in A method...");
}
static void B()
{
throw new Exception();
Console.WriteLine("We can't see this...");
}
这将产生输出:
// Exception is thrown by B() method and handled in A method.
// We are still in A method...