黑马程序员技术交流社区

标题: 关于try catch finally return 的执行顺序 [打印本页]

作者: Joyuang    时间: 2012-2-9 12:21
标题: 关于try catch finally return 的执行顺序
本帖最后由 钱兆元 于 2012-2-9 22:20 编辑

static int show() {
  int a = 0;
try {
return a;
} catch (Exception e) {

} finally {
}
}


报编译错误:must return a resutl of type int!       
为什么会报错误?
作者: 任奇    时间: 2012-2-9 12:45
因为有catch,所以编译器就会认为try里面的return有可能是无效的,有catch就说明程序可能会中断,也就是不一定会执行return....就好比你在一个if语句中写return一样..你必须保证让程序最后总是能返回一个值..
1.try {}.  
2.如果有Error Exception则,执行catch(){}中的代码。  
3.无论有没有 Error Exception都要执行finally{}中的代码。
4.如果没有catch到异常,就finally,然后一定会找try中的return。如果catch到异常,就不会到try中去找return执行。----------

作者: 李泽霖    时间: 2012-2-9 13:11
这是一个不完整的程序,如果在遇到异常就会进入catch块中,发现里面并没有返回值,但是必须要返回值得,则jvm编译这是不通过的,把catch块去掉或在catch块中return一个int值,便解决了,补充:finally在return前执行,在finally的操作,不会改变已经确定的return值,finally不能加return语句,否则出异常
作者: 何洪森    时间: 2012-2-9 13:28
先执行try{}中的语句,如果没有错误,则不会在执行catch中的语句,否则
会执行catch中的语句,但是finally语句最终一定会执行的。
出现的错误就是找不到返回值,因为try中只有一个return语句,而且是可能
出现异常的,所以JVM会认为可能会执行不到,所以在catch中增加一个return
语句,或者在最后增加一个return语句,都可以。但是要注意不能在finally中
加入return语句。
作者: 李文    时间: 2012-2-9 14:20
在try、catch、finally中  先运行try中的语句   如果try中的语句运行错误 就运行catch中的语句   而finally中的语句是必然运行的  除非你在try中语句的左后家上
System.exit(0) 这样就不用运行finally中的语句了    你的这个程序中将return写在finally中就好了
作者: 彭沛东    时间: 2012-2-9 14:26
在try、catch、finally , try中的语句执行、如果报有异常就直接跳到catch中、并不会在return a。
解决办法一:
           在finally 块里加入return a。
方法二:
            在代码末尾加入return a、
作者: 王_涛    时间: 2012-2-9 15:08
finally {}代码块是最终的代码块

1.就是说这个代码块一定会被执行(特殊情况提前终止程序除外System.exit(0)),而且是最后被执行的代码,他执行完就结束本方法。

2.有返回值的方法要求在方法结束之前必须有返回值。而且一旦返回方法就结束。

所以show方法的finally代码块中必须有return语句。
作者: 黄凯    时间: 2012-2-9 15:32
本帖最后由 黄凯 于 2012-2-9 15:34 编辑

你定义的方法show()前面带了个int,就表示你这个方法会return一个int类型的值.

try
{
        需要被检测的代码;
}
catch(异常类型 e)
{
        处理异常的代码;//try{}中的代码出现异常就会跳到这理执行,如果没出现异常则不执行.
}
finallY
{
       一定会执行的代码;
}
这是个一个异常处理语句.你把return放在try{},因为try{}语句块中的代码是有可能出异常的,所以编译的时候是不会被承认为返回值的.
把return放在finally{}中或者放在整个异常处理语句块外面,就不会编译报错了.
你想要了解更多异常方面的知识,推荐你去看毕向东老师的Java基础教学视频中关于异常那部分.

作者: 小白    时间: 2012-2-10 17:52
finally中的代码一定会被执行的!




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