5嵌套异常处理

作者: 蜗牛你慢慢来 | 来源:发表于2019-07-30 15:10 被阅读0次

异常处理程序可以嵌套,以便内部域中引发的异常可以由本地异常处理程序和任意数量的包含异常处理程序处理。这种设计允许由代码处理异常,尽管它与实际生成异常的代码相距较远,但可能对导致异常的条件有更多的了解。

带有编译器指令的嵌套异常处理程序

要了解如何调用用编译器指令定义的嵌套异常处理程序,请考虑清单1中的代码片段。

@try {
 // ...
 if (someError) {
 NSException *theException = [NSException exceptionWithName:MyAppException reason:@"Some error just occurred!" userInfo:nil];
 @throw theException;
 }
}
@catch (NSException *exception) {
 if ([[exception name] isEqualToString:MyAppException]) {
 NSRunAlertPanel(@"Error Panel", @"%@", @"OK", nil, nil, localException);
 }
 @throw; // rethrow the exception
}
@finally {
 [self cleanUp];
}

代码段1 抛出和重新抛出一个异常

在这段代码中,异常会在本地处理程序的末尾再次抛出,从而允许包含异常处理程序采取一些额外的操作。图1说明了用@catch指令创建的嵌套异常处理程序之间的程序控制流。


使用指令的嵌套异常处理程序的控制流

在方法3的域中引发的异常导致执行跳转到其本地异常处理程序。在典型的应用程序中,这个异常处理程序查询异常对象以确定异常的性质。本地处理程序可以处理它识别的异常类型,然后可以重新引发异常对象,将异常通知传递给它上面嵌套的处理程序,即方法2中的处理程序。但是,在调用下一个外部异常处理程序之前,将执行与本地异常处理程序关联的@finally块中的代码。(这对内存管理有影响,如异常处理和内存管理中所讨论的那样。)

重新抛出的异常会出现在下一个更高的处理程序中,就像初始异常是在其自己的异常处理域中引发的一样。方法2的异常处理程序可能会再次处理异常,并可能将异常重新传递给方法1的异常处理程序;方法1的处理程序在方法2的@finally块完成其任务之前不会接收重新抛出的异常。最后,方法1的处理程序重新引发异常。因为方法1上面没有异常处理域,所以异常传递到未捕获的异常处理程序(请参见未捕获的异常)。

翻译源:

相关文章

  • 5嵌套异常处理

    异常处理程序可以嵌套,以便内部域中引发的异常可以由本地异常处理程序和任意数量的包含异常处理程序处理。这种设计允许由...

  • js异常处理总结

    js异常处理总结 先看最基础的情况 try catch 单层嵌套 多级嵌套,捕获下面的异常 预期异常:参数不合法,...

  • 2017.11.3

    今天主要讲了异常处理。嵌套的 try块:在try嵌套的时候,其处理过程有一条准则:从内到外,如果没有合适的异常处理...

  • 11.3

    知识点 嵌套的 try块:在try嵌套的时候,其处理过程有一条准则:从内到外,如果没有合适的异常处理来接收异常,那...

  • 11月3日-4期C语言学习总结

    总结:今天学习第九章异常处理,主要学习异常的定义、为什么要异常、怎么自定义异常、异常处理中怎么嵌套TRY块。下午助...

  • RecyclerView嵌套滑动异常处理

    之前项目中有竖向RecyclerView的子item中嵌套横向RecyclerView,当时横向直接用了Recyc...

  • iOS 异常捕获处理机制(初级篇)

    一、异常处理简介 二、异常捕获案例 使用@try catch捕获异常 例1是最简单的一种写法: 捕获异常之嵌套捕获...

  • 11月3日四期C#总结

    今天学习第九章的异常处理机制。 嵌套的 try块:在try嵌套的时候,其处理过程有一条准则:从内到外,如果没有合适...

  • 5、异常处理

    java Exception:1、Error2、Runtime Exception 运行时异常3、Exceptio...

  • SpringBoot整合Validation进行参数校验

    目录 依赖 在controller中校验接收到的参数 Validation常用注解 异常处理 多级嵌套校验 分组校...

网友评论

    本文标题:5嵌套异常处理

    本文链接:https://www.haomeiwen.com/subject/oornrctx.html