黑马程序员技术交流社区
标题:
通过实例加深try-catch-finally与返回值之间关系的理解
[打印本页]
作者:
段海涛
时间:
2012-11-21 22:09
标题:
通过实例加深try-catch-finally与返回值之间关系的理解
本帖最后由 段海涛 于 2012-11-21 22:13 编辑
这样写为什么会编译报错?该怎么修改?
class FinalTest {
public String divErr(int y) {
String z = "默认返回值";
try {
int x = 5 / y;
return z;
} catch (Exception e) {
z = "catch返回值";
} finally {
z = "finally返回值";
}
}
}
复制代码
显然,这是因为try语句块中的retrun语句可能执行不到,而catch、finally语句块中有没有return语句,这样可能导致函数没有返回值,因此,必须在catch或者finally中加入return语句,如下修改则可编译通过
class FinalTest {
public String divErr(int y) {
String z = "默认返回值";
try {
int x = 5 / y;
return z;
} catch (Exception e) {
z = "catch返回值";
System.out.println("z="+z);
return z;
} finally {
z = "finally返回值";
System.out.println("z="+z);
//return z;
}
}
}
复制代码
这样一来,如在main方法中调用一下,System.out.println("方法运行完毕的返回值是:"+(new FinalTest()).divErr(0) );
运行结果就是这样:
z=catch返回值
z=finally返回值
方法运行完毕的返回值是:catch返回值
明明在catch中已经把z修改,并且进行了return,为何还会执行finally中的语句呢?
既然执行了finally中的语句,且修改了 z = "finally返回值",为何函数运行完毕后的最终返回值却又还是回到catch中的z的值呢?
如果把finally中的return z注释去掉,函数的最终返回值又将发生什么变化?
作者:
罗忠文
时间:
2012-11-25 11:27
在你写的catch 中语句是发生异常时返回的,finally是不管是否发生异常都回去执行的,catch主要是为了抛出异常,finally主要是为了关闭一些打开的资源,
作者:
ljhheima
时间:
2012-11-25 16:55
当出现异常,两个return语句,应该编译不能通过吧
作者:
吴新
时间:
2012-11-25 17:15
return 会覆盖的吧
作者:
小灰灰
时间:
2012-11-25 17:19
不会发生变化~~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2