黑马程序员技术交流社区
标题:
求解释!!!!!!!
[打印本页]
作者:
java冬冬
时间:
2013-5-6 23:17
标题:
求解释!!!!!!!
本帖最后由 java冬冬 于 2013-5-7 21:55 编辑
public class Demo {
public static void main(String[] args) {
System.out.println(demo());
}
static boolean demo() {
try {
return true;
} finally {
return false;
}
}
}
复制代码
结果是:false
求解释!!
作者:
一直在路上
时间:
2013-5-6 23:31
既然你用到了try {
return true;
} finally {
return false;
}
finally表示无论什么情况finally中的代码一定会执行的,所以 return false一定会执行,故返回的肯定是false啊
作者:
翟宝海
时间:
2013-5-6 23:38
本帖最后由 翟宝海 于 2013-5-6 23:45 编辑
demo()前面加boolean,表示这个函数返回的值只能为true或者false,两者只能择其一,而finally是一定会执行的,这种情况下,执行try的时候,返回了一个true,再执行finally的时候,返回的false就将之前的true覆盖了!
作者:
孙金鑫
时间:
2013-5-6 23:45
public class Demo1 {
public static void main(String[] args) {
boolean[] arr = new boolean[2];
demo(arr);
System.out.println(arr[0]+" "+arr[1]);
}
/*下面函数有返回类型,只能返回一个,如果有finally,则必须执行,所以返回false,如果你传进来一个数组,就可以看到程序都try跟finally都执行了*/
static boolean demo(boolean[] arr) {
try {
arr[0] = true;
return true;
} finally {
arr[1] = false;
return false;
}
}
}
复制代码
作者:
曹德君
时间:
2013-5-6 23:53
楼上英明。这样就可以看到数据的变化了。
作者:
郑雪
时间:
2013-5-7 08:11
孙金鑫 发表于 2013-5-6 23:45
代码应该这样修改才能说明问题:
public class Demo456 {
public static void main(String[] args) {
boolean[] arr = new boolean[2];
demo(arr);
System.out.println(arr[0]+" "+arr[1]);
}
@SuppressWarnings("finally")
static boolean demo(boolean[] arr) {
try {
arr[0] = true;
return arr[0];
}finally {
arr[1] = false;
return arr[1];
}
}
}
复制代码
运行的结果说明:确实是因为finally中的代码是必须执行的代码,而一个方法只能有一个返回值,所以finally中的返回值覆盖了try中的返回值。
作者:
宋晓明
时间:
2013-5-7 09:00
finally中的代码一定会执行,最终覆盖了try中的直
作者:
黄玉昆
时间:
2013-5-7 21:51
如果问题未解决,请继续追问,如果问题解决了,请将分类改为“已解决”,谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2