A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Joyuang 黑马帝   /  2012-2-9 12:21  /  2701 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 钱兆元 于 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!       
为什么会报错误?

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

8 个回复

倒序浏览
因为有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执行。----------

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1

查看全部评分

回复 使用道具 举报
这是一个不完整的程序,如果在遇到异常就会进入catch块中,发现里面并没有返回值,但是必须要返回值得,则jvm编译这是不通过的,把catch块去掉或在catch块中return一个int值,便解决了,补充:finally在return前执行,在finally的操作,不会改变已经确定的return值,finally不能加return语句,否则出异常
回复 使用道具 举报
先执行try{}中的语句,如果没有错误,则不会在执行catch中的语句,否则
会执行catch中的语句,但是finally语句最终一定会执行的。
出现的错误就是找不到返回值,因为try中只有一个return语句,而且是可能
出现异常的,所以JVM会认为可能会执行不到,所以在catch中增加一个return
语句,或者在最后增加一个return语句,都可以。但是要注意不能在finally中
加入return语句。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
在try、catch、finally中  先运行try中的语句   如果try中的语句运行错误 就运行catch中的语句   而finally中的语句是必然运行的  除非你在try中语句的左后家上
System.exit(0) 这样就不用运行finally中的语句了    你的这个程序中将return写在finally中就好了
回复 使用道具 举报
在try、catch、finally , try中的语句执行、如果报有异常就直接跳到catch中、并不会在return a。
解决办法一:
           在finally 块里加入return a。
方法二:
            在代码末尾加入return a、

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
王_涛 黑马帝 2012-2-9 15:08:22
7#
finally {}代码块是最终的代码块

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

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

所以show方法的finally代码块中必须有return语句。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黄凯 黑马帝 2012-2-9 15:32:55
8#
本帖最后由 黄凯 于 2012-2-9 15:34 编辑

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

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

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
小白 黑马帝 2012-2-10 17:52:39
9#
finally中的代码一定会被执行的!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马