黑马程序员技术交流社区

标题: 关于异常抛出throw的一个问题 [打印本页]

作者: 淡夜清风    时间: 2014-1-12 17:38
标题: 关于异常抛出throw的一个问题
public class Demo2 {

        public static int i=3;
       
        public static void func()
        {
                try
                {
                        if(i<5) //有了if条件,能通过编译运行; 如果把这句话注释掉之后编译不通过,为什么?
                        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");
        }
}

public class Demo2 {

        public static int i=3;
       
        public static void func()
        {
                try
                {
                        if(i<5) //有了if条件,能通过编译运行; 如果把这句话注释掉之后编译不通过,为什么?
                        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");
        }
}
作者: 完美恋爱    时间: 2014-1-12 18:29
你也不用脑袋想一想,你把if()这个去掉了, 那你还抛什么异常类对象啊!
作者: 淡夜清风    时间: 2014-1-12 18:35
完美恋爱 发表于 2014-1-12 18:29
你也不用脑袋想一想,你把if()这个去掉了, 那你还抛什么异常类对象啊!

我就直接抛也没事。。
-------------------
public class Demo2 {

        public static int i=3;
       
        public static void func()
        {
                try
                {
                //        if(i<5)
                        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");
        }
}
运行结果:
B
D

作者: ixiangfeng    时间: 2014-1-12 18:38
把if去掉的话,就是一定会抛异常, System.out.println("A")这句话就相当于废话了,执行不到,肯定编译不过
作者: 完美恋爱    时间: 2014-1-12 19:06
淡夜清风 发表于 2014-1-12 18:35
我就直接抛也没事。。
-------------------
public class Demo2 {

是啊!你要是不写if的话,你也别把输出语句注释啊!那样肯定报错
作者: 淡夜清风    时间: 2014-1-12 19:47
完美恋爱 发表于 2014-1-12 19:06
是啊!你要是不写if的话,你也别把输出语句注释啊!那样肯定报错

为什么呢?谢谢。
作者: 淡夜清风    时间: 2014-1-12 19:48
ixiangfeng 发表于 2014-1-12 18:38
把if去掉的话,就是一定会抛异常, System.out.println("A")这句话就相当于废话了,执行不到,肯定编译不过 ...

有可能。。
作者: ixiangfeng    时间: 2014-1-12 19:52
淡夜清风 发表于 2014-1-12 19:48
有可能。。

呃 不是有可能,事实就是这样 当你的程序中有执行不到的语句JVM在编译时就会报错的
作者: 淡夜清风    时间: 2014-1-12 20:33
ixiangfeng 发表于 2014-1-12 19:52
呃 不是有可能,事实就是这样 当你的程序中有执行不到的语句JVM在编译时就会报错的 ...

哦哦 谢谢!
作者: app297    时间: 2014-1-12 20:53
//有了if条件,能通过编译运行; 如果把这句话注释掉之后编译不通过,为什么?
if(i<5){
    throw new Exception();
}
   System.out.println("A");

其实这个就是格式问题了,楼上的说得对,if去掉之后, syso的这句代码就废掉了,所以编译会出错




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2