C# 中 try{...... try{} catch{a;} } catch {b;} 里面try抛出异常,执行a语句后,会不会直接执行b语句

 我来答
jelvis
推荐于2018-04-30 · TA获得超过5631个赞
知道大有可为答主
回答量:2480
采纳率:62%
帮助的人:837万
展开全部

不会。这里有个总结,你可以看看:

static void Main(string[] args)
{
    /* 嵌套try块
     * try
     * {
     *      //A
     *      try
     *      {
     *          //B
     *      }
     *      catch
     *      {
     *          //C
     *      }
     *      finally
     *      {
     *          //D
     *      }
     *      //E
     * }
     * catch
     * { ... }
     * finally
     * { ... }
     * 
     * 抛出异常在:内层A,E处由外层catch块捕获,并执行外层finally
     * 抛出异常在:内层B处,且有一合适内层catch捕获,执行内层finally,后执行E处
     * 抛出异常在:内层B处,但内层catch块没有合适处理程序,执行内层finally,搜索外层catch,找合适的,执行外层finally,此时不会执行E
     * 抛出异常在:内层C处,退出内层catch块,执行内层finally,搜索外层catch,找到合适,执行外层finally
     * 抛出异常在:内层D处,退出内层finally块,搜索外层catch,找到合适,执行外层finally
     */
    /* 使用嵌套块的原因:
     * 1.修改所抛出的异常类型
     * 2.在代码的不同地方处理不同类型的异常
     */
}
刷新①丅5e6
2015-01-23 · TA获得超过4333个赞
知道大有可为答主
回答量:1499
采纳率:64%
帮助的人:602万
展开全部

楼上说的不对,catch{a;}已经把异常处理了,catch {b;}捕获不到新的异常,除非catch{a;}内部又重新把异常throw出来。

楼主不信可以用下面这段代码测试,只会输出ex1,不会输出ex2。

            try
            {
                try 
                {
                    string str = string.Empty;
                    int n = Convert.ToInt32(str);
                }
                catch
                {
                    Console.WriteLine("ex1" );
                }
            }
            catch
            {
                Console.WriteLine("ex2" );
            }
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-01-23
展开全部
会。。
catch 是捕获异常。对应a的一个异常,b的一个异常。如果触发a异常则会进去a catch,同样 ,就会进入B catch。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-01-23
展开全部
应该不会。内部异常直接处理了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式