黑马程序员技术交流社区
标题:
关于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