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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yang649981273 中级黑马   /  2014-7-7 18:59  /  1397 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面两段代码 throw new Exception();的下面都有语句,为啥第2个代码throw new Exception();语句在执行
foo(1);的时候却通过了不是说throw new Exception();语句下面不可以写语句的么?
第一个:
class examcry{
        public static void func(){
                try{
                        throw new Exception();
                        System.out.println("A");
                }
                catch(Exception e){
                        System.out.println("B");
                }
        }

public static void main(String[] args){
        try{
                func();
        }
        catch(Exception e){
                System.out.println("C");
        }
        System.out.println("D");

}
}
第二个
class examcry20
{
        public static String output="";
        public static void foo(int i)
        {
                try{
                        if(i==1)
                                throw new Exception();
                        output+="1";
                }
                catch(Exception e){
                        output+="2";
                        return;
                }
                finally{
                        output+="3";
                }
                output+="4";
        }
        public static void main(String args[])
        {
                foo(0);
                System.out.println(output);
                foo(1);
                System.out.println(output);
        }
}

6 个回复

倒序浏览
因为第二段代码始终会执行finally
回复 使用道具 举报
001可望成功 发表于 2014-7-7 19:12
因为第二段代码始终会执行finally

我问的是为啥  foo(1);的时候也可以执行,不是 throw new Exception();下面不允许有语句的么?
回复 使用道具 举报
yang649981273 发表于 2014-7-7 20:10
我问的是为啥  foo(1);的时候也可以执行,不是 throw new Exception();下面不允许有语句的么? ...

注意第二段代码里的throw 是在if语句内的
也就是说这段是有可能执行也有可能不执行的
因此下方可以有其他语句
回复 使用道具 举报
第一个程序,throw语句的下面一行 System.out.println("A");语句永远不可能执行到,所以编译会报错。
第二个程序,因为throw在if条件语句中,所以throw下面的 output+="1";语句有可能会被执行到,所以正确。
回复 使用道具 举报
1.因为加了if语句,所以下面的语句只是有可能可以运行,所以编译没有问题。
2.而真正到了运行期,如果参数符合if条件,那么下面的语句就不会被运行,反之则会被运行。
回复 使用道具 举报
cat73 发表于 2014-7-7 20:16
注意第二段代码里的throw 是在if语句内的
也就是说这段是有可能执行也有可能不执行的
因此下方可以有其他 ...

太感谢了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马