我正在阅读 D编程语言,它说throw
看看是否存在现有的异常链(正在处理异常),如果存在,则附加新的例外。
但是如果第二个异常可以在它逃脱第一个异常处理程序之前处理呢?例如,如果捕获第一个函数的catch
调用另一个函数,这会导致异常,但可以处理它。好像捕手必须知道它所调用的任何代码可以在内部调用哪些异常。
答案 0 :(得分:3)
仅当第二个抛出的异常转义catch
块时才会发生异常链接。如果它在catch
块内处理,无论是在块中还是在被调用者中,都不会发生任何异常情况 - 第一个异常会正常处理。
您可以通过一个简单的示例自行检查:
class E : Exception { this() { super("E"); } }
class F : Exception { this() { super("F"); } }
void main()
{
try
throw new E;
catch (E e)
{
try
throw new F;
catch (F f)
{}
}
}
此程序将正常退出,因为两个异常都是以静默方式处理的。