黑马程序员技术交流社区

标题: 为何编译失败? [打印本页]

作者: Geek_001    时间: 2014-6-25 18:23
标题: 为何编译失败?
本帖最后由 Geek_001 于 2014-6-26 02:18 编辑

不是已经处理了异常了吗?

捕获.PNG (36.36 KB, 下载次数: 3)

捕获.PNG

作者: alive    时间: 2014-6-25 18:37
直接捕获异常,执行语句直接跳到catch语句了,执行不到了

QQ截图20140625183619.png (10.58 KB, 下载次数: 4)

QQ截图20140625183619.png

作者: Geek_001    时间: 2014-6-25 18:41
alive 发表于 2014-6-25 18:37
直接捕获异常,执行语句直接跳到catch语句了,执行不到了

我知道遇到throw,其下面的语句执行不到,但捕获的异常不是处理了吗?
若没在函数上声明异常又没catch的话会失败的,关键是此题不是下面catch了吗?

作者: alive    时间: 2014-6-25 18:50
这是语法错误,执行不到的语句怎么可能存在呢,就想你见过return关键字下面还有执行语句的么。你直接抛出异常,打印语句是执行不到的。
作者: Geek_001    时间: 2014-6-25 21:00
alive 发表于 2014-6-25 18:50
这是语法错误,执行不到的语句怎么可能存在呢,就想你见过return关键字下面还有执行语句的么。你直接抛出异 ...

return 下面可以有语句啊,比如finally{}。。。。。
你的意思是执行不到的语句就可以被Java视为垃圾,所以会编译失败。
作者: 马到成功2014    时间: 2014-6-25 21:34
Geek_001 发表于 2014-6-25 21:00
return 下面可以有语句啊,比如finally{}。。。。。
你的意思是执行不到的语句就可以被Java视为垃圾,所 ...

这句话废了 就编译时错误了
作者: 彭飞    时间: 2014-6-25 22:21
你试试 return 下面能写语句不,

视频里讲过,  throw 和  return  ,break,是一个等级权限的 。

其他的好像也没什么的了。
作者: Running    时间: 2014-6-25 22:24
遇到有异常可能的时候,要么抛,要么try。。。
作者: 这个夏天的芬芳    时间: 2014-6-25 22:39
{:2_31:}{:2_31:}{:2_31:}{:2_31:}{:2_31:}{:2_31:}
作者: Alan_Kwan    时间: 2014-6-25 22:48
本帖最后由 Alan_Kwan 于 2014-6-25 22:51 编辑

按道理这段代码是不会编译失败的,你把编译失败的信息传上来看看?
按逻辑说的话,你在main函数上try是没必要的,因为func不会再抛出异常,所以肯定是print不到C的。最后结果是BD


噢,我知道了,之前漏掉了printA的语句。。这是貌似是JAVA编译机制特有的,如果在代码中定义了肯定不会执行的语句的话就会报错。。C语言貌似没有。。

作者: alive    时间: 2014-6-26 00:12
Geek_001 发表于 2014-6-25 21:00
return 下面可以有语句啊,比如finally{}。。。。。
你的意思是执行不到的语句就可以被Java视为垃圾,所 ...

在同一个代码块中啊,finally跟try是两个代码块,比如for循环用return结束,下面还能用有代码么
作者: Geek_001    时间: 2014-6-26 02:04
马到成功2014 发表于 2014-6-25 21:34
这句话废了 就编译时错误了

额,这样啊!return后只有finally{}可以执行到,其它语句就执行不到;
finally{}只有在System.exit(),jvm退出时才执行不到,其它时候一定会执行,额要记的好多啊!
作者: Geek_001    时间: 2014-6-26 02:06
彭飞 发表于 2014-6-25 22:21
你试试 return 下面能写语句不,

视频里讲过,  throw 和  return  ,break,是一个等级权限的 。

谢谢!额记住了
作者: Geek_001    时间: 2014-6-26 02:08
Alan_Kwan 发表于 2014-6-25 22:48
按道理这段代码是不会编译失败的,你把编译失败的信息传上来看看?
按逻辑说的话,你在main函数上try是没必 ...

额.....你可以把代码复制过去看看的,编译失败。
作者: Geek_001    时间: 2014-6-26 02:13
alive 发表于 2014-6-26 00:12
在同一个代码块中啊,finally跟try是两个代码块,比如for循环用return结束,下面还能用有代码么 ...

return在一个代码块结束后,后面跟的是finally{}代码块,哦,貌似两个代码块.....
作者: Geek_001    时间: 2014-6-26 02:16
Running 发表于 2014-6-25 22:24
遇到有异常可能的时候,要么抛,要么try。。。

在函数内抛出异常,必须在函数上声明,捕捉的异常要么try,要么继续抛,抛的话同时要在函数上声明;
若是运行时异常,则不需声明,捕捉到建议不try,以让程序停下来,以修改代码。
作者: Geek_001    时间: 2014-6-26 02:17
彭飞 发表于 2014-6-25 22:21
你试试 return 下面能写语句不,

视频里讲过,  throw 和  return  ,break,是一个等级权限的 。

:)谢了,哥们。




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