try catch里能否内嵌try catch?答案是肯定的。但是等内层try catch出异常之后是个什么执行顺序呢?看下面代码

 static void Main(string[] args)
{
try
{
Console.WriteLine("----------------------外层try------------------------------");
errorMethod();
}
catch (Exception ex)
{
Console.WriteLine("----------------------外层catch" + ex.Message + "------------------------------");
}
finally {
Console.WriteLine("----------------------外层finally------------------------------");
} Console.ReadKey(); } private static void errorMethod()
{
try
{
Console.WriteLine("----------------------内层try------------------------------");
int i = ;
int a = /i;
}
catch (Exception ex)
{
Console.WriteLine("----------------------内层catch" + ex.Message + "------------------------------");
}
finally {
Console.WriteLine("----------------------内层finally------------------------------");
}
}

内层catch处理了异常,所以没有执行外层catch。

咱们把内层的catch注释掉  再试下

 static void Main(string[] args)
{
try
{
Console.WriteLine("----------------------外层try------------------------------");
errorMethod();
}
catch (Exception ex)
{
Console.WriteLine("----------------------外层catch" + ex.Message + "------------------------------");
}
finally {
Console.WriteLine("----------------------外层finally------------------------------");
} Console.ReadKey(); } private static void errorMethod()
{
try
{
Console.WriteLine("----------------------内层try------------------------------");
int i = ;
int a = /i;
}
//catch (Exception ex)
//{
// Console.WriteLine("----------------------内层catch" + ex.Message + "------------------------------");
//}
finally {
Console.WriteLine("----------------------内层finally------------------------------");
}
}

很明显,外层catch捕获了异常。

总结:try catch嵌套,内层不能捕获时,会考虑外层内否捕获,内层能捕获,则外层catch不执行。

         try
{
//A
try
{
//B
}
catch
{
//C
}
finally
{
//D
}
//E
}
catch
{
//F
}
finally
{
//G
}

上面的代码 执行顺序

抛出异常在:内层A,E处由外层catch块捕获,并执行外层finally  
抛出异常在:内层B处,且有一合适内层catch捕获,执行内层finally,后执行E处  
抛出异常在:内层B处,但内层catch块没有合适处理程序,执行内层finally,搜索外层catch,找合适的,执行外层finally,此时不会执行E  
抛出异常在:内层C处,退出内层catch块,执行内层finally,搜索外层catch,找到合适,执行外层finally  
 抛出异常在:内层D处,退出内层finally块,搜索外层catch,找到合适,执行外层finally

A抛异常 A=》F=》G

B抛异常 C能捕获 B=》C=》D=》E=》F=》G (若C处无法捕获B=》F=》G)

C抛异常 C=》D=》F=》G

D抛异常 D=》F=》G

E抛异常 A=》F=》G 同A

另外 try{}catch{} 中未做捕获类型限定,可捕获所以异常。如 try{}catch(IOException ex){} 则catch只能捕获I/O操作引发的异常。

最新文章

  1. 为什么匿名内部类只能访问final变量【转】
  2. linux:lnmp环境搭建
  3. transport tablespace将一个表空间下的数据移到另一个表空间
  4. MFC编程入门
  5. uva1637Double Patience
  6. Jasper_crosstab_columngroup header position config - (headerPosition="Stretch")
  7. PAT 1002 Hello World for U (20)
  8. Smrty模版总结(转)
  9. 前端面试题系列(1):doctype作用 标准模式与兼容模式
  10. bzoj 4871: [Shoi2017]摧毁“树状图” [树形DP]
  11. RSA签名和验证数据
  12. #ifndef, #define, #endif 作用
  13. Jmeter名词注解
  14. Best quotes from The Vampire Diary(《吸血鬼日记》经典台词)
  15. Activiti5小试牛刀demo流程
  16. 《计算机图形学》2.1.4 彩色CRT监视器
  17. License 校验
  18. (匹配)Fire Net --hdu --1045
  19. a+b+c的N次方展开
  20. shiro简单入门介绍

热门文章

  1. Html-IOS下input的样式添加不上的解决方案
  2. 动态规划之最长公共子序列(LCS)
  3. BZOJ 2001: [Hnoi2010]City 城市建设
  4. Linux下的几个好用的命令与参数
  5. Python 【第七章】:Html 和 CSS
  6. Windows API Hooking in Python
  7. ReactNative 使用微软的CodePush进行热更新,继续填坑
  8. px和em,rem的区别
  9. sass接触
  10. Apache服务器网站访问伪静态内页出现No input file specified.的完美解决方案