A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 乔玉吉 中级黑马   /  2012-3-17 02:50  /  2128 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class  TryCatchFinallyTest
{
        private static void foo()
        {
                try
                {
                        System.out.println("try");
                        foo();
                }
                catch (Throwable e)
                {
                        System.out.println("catch");
                        foo();
                }
                finally
                {
                        System.out.println("finally");
                        foo();
                }
        }
        public static void main(String[] args)
        {
                foo();
        }
}

上述代码运行后:
A.执行一段时间后报栈溢出。
B.会一直输出“try”。
C.会一直输出“try”和“finally”。
D.会一直输出“try”、“catch”和“finally”

4 个回复

倒序浏览
我运行了一下,一直输出“try”和“finally”。你是不理解为啥这样输出吗?
回复 使用道具 举报
我感觉这成了个无线循环了  跟递归调用差不多   
     我的分析是: 第一种情况    如果是异常的话  try 里面就不执行  catch里执行 那么就会 输出 catch 再调用一次foo()  而finally 一定执行  会输出finally  再调用foo()   这是一轮  依次这样循环  内存会爆掉的     
                       第二种情况     如果是不是异常的话  那么执行try   输出try   再调用foo()   finally上上面情况一样 也是个无线循环了 而且是越调用循环越多      所以我觉得应该选a
回复 使用道具 举报
蒙武辉 发表于 2012-3-17 02:56
我运行了一下,一直输出“try”和“finally”。你是不理解为啥这样输出吗?
...

我也觉得答案是C
回复 使用道具 举报
蒙武辉 发表于 2012-3-17 02:56
我运行了一下,一直输出“try”和“finally”。你是不理解为啥这样输出吗?
...

是啊  怎么不是一直try呢 finally不是最后输出 吗
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马