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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 罗广伟 中级黑马   /  2013-5-9 22:22  /  1947 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 罗广伟 于 2013-5-11 12:32 编辑

class Test
{
        public static void main(String[] args)
        {
                try
                {
                        showExce();
                        System.out.println("A");//此语句不执行
                }
                catch(Exception e)
                {
                        System.out.println("B");//此语句执行
                }
                finally
                {
                        System.out.println("C");//此语句执行
                }
                System.out.println("D");//此语句执行
        }
        public static void showExce()throws Exception
        {
                throw new Exception();
        }
}
打印结果是BCD,在这个程序里打印A是不执行的。

问题是在出现异常后如何判断哪些语句是不执行的。是出现异常后一个大括号内异常后面的语句不执行吗?

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

9 个回复

倒序浏览
在try里面发生异常后try里面的代码就不执行了就跳到catch那里执行catch处理的代码,然后就到finally里面执行。执行完了就到外面的代码了,
要是在catch里面有return语句的话他会把finally里面的代码执行完了在退出,因为finally是最终的意思所以不管有没有处理异常他都会执行finally里面的语句;

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
尹桥印 发表于 2013-5-9 22:24
出现异常之后,try里面的整个代码块都不会执行了呐,直接运行catch

意思是出现异常后,异常所在大括号这个代码块异常之后的代码不执行?意思就是出现异常后不执行的语句的范围是如何确定的?
回复 使用道具 举报
这个问题俺也不太清楚  有迷惑过
回复 使用道具 举报
简单来说,

try里面的代码,比如说只有三句,当第二句出现异常,那第二句以及第三局都不会执行,抛出的异常时第二句的异常

catch 里面的时出现所要捕获的异常后,才执行的,也就是说,如果try中的异常,不是catch所要捕获的异常,那它是不会执行的,

finally 是一定会执行的语句,不管有没有异常,但是又一点例外,就是System.exit(0); 如果这句话在catch中出现,那就不会执行finally内的语句了,
   当然,在finally内部出现,就不会执行此语句一下的所有语句..因为它是强制退出程序的意思,程序都退出了,还有执行的必要么?

异常的大概流程也就是这样子了,希望对你有帮助。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
罗广伟 发表于 2013-5-9 22:42
意思是出现异常后,异常所在大括号这个代码块异常之后的代码不执行?意思就是出现异常后不执行的语句的范 ...

在异常发生后的try代码块中剩下的语句都不会执行,而调用catch代码块来处理异常,后面的楼上们都讲了。
你可以在调用那个会抛异常的方法前添加个打印语句,或再在那个抛异常方法抛异常前也加个语句,就很容易理清了。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
你好,你运行试试。我想你会知道原因的
class Test
{
        public static void main(String[] args)
        {
                try
                {
                        showExce();
                        System.out.println("A");//假如真的有异常的话这里的语句是不会执行的。因为这里都是被你捕捉的。意思就是可能会发生异常的代码
                }
                catch(Exception e)
                {
                        System.out.println("B");//catch语句中放的都是被捕获后用于修改的代码,也可以理解为用来弥补的代码。你想输出A就可以在catch语句中输出
                                                System.out.println("A");
                                }
                finally//finally的作用是一定会执行的代码。意思就是出现异常一次就执行一次这个里面的代码。主要用来关闭资源的。所以这里面的代码一点会执行到
                {
                        System.out.println("C");//此语句执行
                }
                System.out.println("D");//此语句执行。。而这句就简单了 ,正常输出。。
        }
        public static void showExce()throws Exception
        {
                throw new Exception();
        }


                //总之当异常发生时,try里面的语句都是不会执行的。因为它已经被捕捉了。而代替它的是catch中的语句。然后就是finally中的重要语句
}

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
class Test
{
        public static void main(String[] args)
        {
                try //正常情况下是执行try里面的语句。如果发生异常,那么会从发生异常处停止并跳到catch
                {
                        showExce();
                        System.out.println("A");//此语句不执行
                }
                catch(Exception e)// 如果有异常发生,则将会被Exception 类捕获,此时执行异常处理
                {
                        System.out.println("B");//此语句执行
                }
                finally  //这个里面的语句总是执行
                {
                        System.out.println("C");
            }
                System.out.println("D");//程序顺序执行到此
        }
        public static void showExce()throws Exception
        {
                throw new Exception();
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马