黑马程序员技术交流社区

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

作者: 杜成龙    时间: 2013-6-1 10:22
标题: 关于抛出异常的问题
本帖最后由 杜成龙 于 2013-6-12 19:05 编辑
  1. class Verification
  2. {
  3.        public static String output="";
  4.        public static void foo(int i)
  5.       {
  6.              try
  7.              {
  8.                    if(i==1)
  9.                    throw new Exception();
  10.                    output+="1";
  11.              }
  12.             catch (Exception e)
  13.             {
  14.                    output+="2";
  15.                    return;
  16.             }
  17.            finally
  18.           {
  19.                   output+="3";
  20.           }
  21.           output+="4";
  22.     }
  23.    public static void main(String[] args)
  24.    {
  25.           foo(0);
  26.           System.out.println(output);
  27.           foo(1);
  28.           System.out.println(output);

  29.    }
  30. }
复制代码
当调用foo(1)时,往里面传的是1,那么就会 throw new Exception(); 但是它下面还有语句,按说编译不应该是失败的吗,它怎么会通过呢?


作者: 骑上最爱    时间: 2013-6-1 15:19
编译器是看下面的语句有没有机会执行到,想这种传值的方式是有机会执行到的,所以不会报错。报错是报那些一定不会执行到的语句。
作者: 刘海芳    时间: 2013-6-1 15:59
本帖最后由 刘海芳 于 2013-6-1 16:02 编辑

代码注释处给出了我的理解:
  1. class Verification
  2. {
  3.        public static String output="";
  4.        public static void foo(int i)
  5.       {
  6.              try
  7.              {
  8.                    if(i==1)
  9.                    throw new Exception();//这异常其实已经抛出去了,只是你使用了catch语句捕获了以此,当么用打印以此
  10.                    output+="1";//这句话没用放在这编译器不会报错,哪不会被执行
  11.              }
  12.             catch (Exception e)
  13.             {
  14.                     e.printStackTrace();//如果加上这句,你会发现编译已经报错了
  15.                    output+="2";
  16.                    return;
  17.             }
  18.            finally
  19.           {
  20.                   output+="3";
  21.           }
  22.           output+="4";
  23.     }
  24.    public static void main(String[] args)
  25.    {
  26.           foo(0);
  27.           System.out.println(output);
  28.           foo(1);
  29.           System.out.println(output);

  30.    }
  31. }
复制代码

作者: 狂飙的yellow.co    时间: 2013-6-1 16:50
哥们咋这么蛋疼呢。。。。。。。。。。。。。。
  1. public static void foo(int i)
复制代码
你本来想返回的数据是 String
起码就的这样写
  1. public static String foo(int i)
复制代码
而且还有

这个你看看。。。。。。你啥玩意都没有返回。。。。。。。。。。。。。。。。我真是服了哥们。。。。。。。。。。。。。。。。


作者: 不破大地    时间: 2013-6-1 17:48
编译检测语法格式正确与否,虽然在运行中跳过了,但是书写格式上是正确的。
作者: 不破大地    时间: 2013-6-1 17:50
编译检测语法格式正确与否,虽然在运行中跳过了,但是书写格式上是正确的。




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