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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王廷顺 中级黑马   /  2013-4-29 16:11  /  1151 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王廷顺 于 2013-5-1 09:57 编辑

程序如下:
class Demo
{
     public static void func()throws Exception
     {
           try
           {
                throw new Exception();
           }
           finally
           {
                System.out.println("B");
           }

     }
     public static void main(String[] args)
     {
           try
           {
                 func();
                 System.out.println("A");

           }
           catch(Exception e)
           {
                 System.out.println("C");
           }
           System.out.println("D");
     }
}
输出结果:B
                C
                D
为什么throw new Exception();抛出异常, catch(Exception e)捕捉到后不先执行catch里的语句,而是继续执行finally里的语句。

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 神马都是浮云

查看全部评分

6 个回复

倒序浏览
本帖最后由 殇_心。 于 2013-4-29 16:32 编辑

main方法这里调用了func这个方法。
会先执行这个方法。try语句执行后(尽管抛出异常),这里A就不会输出了,
依然会运行finnally语句。输出B
如果这个方法出现异常,main方法里面catch就会处理,输出C
然后catch处理异常了,程序会继续运行。输出D
回复 使用道具 举报
因为你这是两个函数,并且finally是一定会被执行的语句,除非是所连接的try里面有System.exit(0),当你调用func的时候,就会去执行func这个函数,然后由于其要抛出异常,所以就把把异常抛给了调用它的那个函数也就是主函数,但是由于finally是一定会被执行的语句,所以先打印的是B然后是C再然后是D。
回复 使用道具 举报
当执行fun()由语句的时候,因为fun()方法是抛出异常,所以一定执行finally语句,然后执行主函数是,主函数中的try{}出现异常,所以A不执行,后在执行catch(){}里面的语句,所以打印出BCD。

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 接下来加分会稍难点

查看全部评分

回复 使用道具 举报
首先主函数调用func(),func中try{throw}但没有catch也就是抛出异常并没有捕捉,那么会执行fianl,然后回到主函数中(func函数运行结束也就是运行到func函数最外围的‘}’处),这样你就理解,这也是func调用后没执行完还在栈内存中还没出栈等到运行完在出栈回到起初被调用的下一条执行代码处!所以结果是BCD,你也可以在func的结尾处加一条打印语句,看看结果就明白了!

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 继续加油

查看全部评分

回复 使用道具 举报
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
谢谢大家的回复,我明白了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马