黑马程序员技术交流社区
标题:
关于抛出异常的问题
[打印本页]
作者:
杜成龙
时间:
2013-6-1 10:22
标题:
关于抛出异常的问题
本帖最后由 杜成龙 于 2013-6-12 19:05 编辑
class Verification
{
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);
}
}
复制代码
当调用foo(1)时,往里面传的是1,那么就会 throw new Exception(); 但是它下面还有语句,按说编译不应该是失败的吗,它怎么会通过呢?
作者:
骑上最爱
时间:
2013-6-1 15:19
编译器是看下面的语句有没有机会执行到,想这种传值的方式是有机会执行到的,所以不会报错。报错是报那些一定不会执行到的语句。
作者:
刘海芳
时间:
2013-6-1 15:59
本帖最后由 刘海芳 于 2013-6-1 16:02 编辑
代码注释处给出了我的理解:
class Verification
{
public static String output="";
public static void foo(int i)
{
try
{
if(i==1)
throw new Exception();//这异常其实已经抛出去了,只是你使用了catch语句捕获了以此,当么用打印以此
output+="1";//这句话没用放在这编译器不会报错,哪不会被执行
}
catch (Exception e)
{
e.printStackTrace();//如果加上这句,你会发现编译已经报错了
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);
}
}
复制代码
作者:
狂飙的yellow.co
时间:
2013-6-1 16:50
哥们咋这么蛋疼呢。。。。。。。。。。。。。。
public static void foo(int i)
复制代码
你本来想返回的数据是 String
起码就的这样写
public static String foo(int i)
复制代码
而且还有
QQ图片20130601164846.jpg
(5.98 KB, 下载次数: 0)
下载附件
2013-6-1 16:49 上传
这个你看看。。。。。。你啥玩意都没有返回。。。。。。。。。。。。。。。。我真是服了哥们。。。。。。。。。。。。。。。。
作者:
不破大地
时间:
2013-6-1 17:48
编译检测语法格式正确与否,虽然在运行中跳过了,但是书写格式上是正确的。
作者:
不破大地
时间:
2013-6-1 17:50
编译检测语法格式正确与否,虽然在运行中跳过了,但是书写格式上是正确的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2