黑马程序员技术交流社区
标题:
在做一道基础测试题,发现的一个问题
[打印本页]
作者:
路西法
时间:
2014-4-1 12:35
标题:
在做一道基础测试题,发现的一个问题
用代码证明,在try中写了return,后面又写了finally,是先执行return还是先执行fianlly?
我写的是 public static void main(String[] args) {
System.out.println(tryReturn());//直接输出tryReturn运行结果
}
public static int tryReturn() {
int count= 3;//定义一个计数器
try{
System.out.println(count);
return ++count; //由此判断
} finally{
System.out.println("finally已经被执行并且计数器是:"+(++count));
/*//return ++count;本来想在这也返回个值的,
但是如果在finally语句中包涵return则系统不
会跳回try块中但是这也侧面证明try中的return
是在finally语句之后执行*/
}
}
输出结果是 3
finally已经被执行并且计数器是:5
4
发现有趣的地方:当在finally块里面的输出语句中加个++count 时,我们会发现return确实是在finally之后返回值 但是return中的的count却比finally中的count的先自加 这时为什么呢?
作者:
osully
时间:
2014-4-1 12:38
return 是用来结束函数用的....
可想而知 函数都结束了 还finally?????
作者:
还是回去火星吧
时间:
2014-4-1 12:53
我也有这道题,我自己觉得,因为finally是函数中必须执行的语句块,所以当finally还没执行的时候,所有被执行过的变量和语句块都存于内存中。
作者:
黄晓鑫
时间:
2014-4-1 12:55
我只知道finally是一定要执行的语句块 比return先执行 除非遇到System.exit(0);
作者:
心?=忐§忑]
时间:
2014-4-1 14:54
return ++count;我觉得关键语句是这,看两个加号在前面还是在后面。
作者:
路西法
时间:
2014-4-1 23:28
黄晓鑫 发表于 2014-4-1 12:55
我只知道finally是一定要执行的语句块 比return先执行 除非遇到System.exit(0);
我也知道finally比try中的return先执行 但是看上面的计数器 为什么return的count 比finally中的 先先执行
作者:
Engle
时间:
2014-4-1 23:54
个人看法:
当try语句后面有finally时,finally语句一定会执行(排除虚拟机崩溃或者System.exit(0);)
java 的方法中代码一般而言是自上而下执行的,遇到return 语句肯定就不会再往下执行了。
注意:finally代码块内容是最终都会执行,它强调的是无论是否有异常产生,它和try不是一个代码块的内容,所以不能把它看成是return下面的代码。
所以在这种情况下,java代码只能先执行finally语句后再return。
作者:
肖涵
时间:
2014-4-2 17:28
public static void main(String[] args) {
System.out.println(tryReturn());
}
public static int tryReturn() {
int count= 3;
try{
System.out.println(count);
return ++count;
}
finally{
System.out.println("finally已经被执行并且计数器是:"+(++count));
/*//return ++count;本来想在这也返回个值的,
但是如果在finally语句中包涵return则系统不
会跳回try块中但是这也侧面证明try中的return
是在finally语句之后执行*/
}
}
作者:
肖涵
时间:
2014-4-2 17:31
在try catch异常语句中,当try语句中出现异常时,执行catch语句,catch语句中的return首先返回一个结果保存在内存中,如果后面还有finally语句是,必定要执行finally语句,finally中如果有return的话,会再次返回一个值,覆盖catch中的return值。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2