黑马程序员技术交流社区
标题:
关于先后执行顺序的问题
[打印本页]
作者:
lucy198921
时间:
2013-3-31 22:02
标题:
关于先后执行顺序的问题
本帖最后由 lucy198921 于 2013-4-1 20:42 编辑
public class Test {
private int x = 2;
public static void main(String[] args) {
Test t = new Test();
t.test();
System.out.println("-----------heima------------"+t.x);
}
public int test(){
try {
++x;
System.out.println("-----------try------------"+x);
return x;
} catch (Exception e) {
throw new RuntimeException();
} finally{
x++;
System.out.println("-----------finally------------"+x);
}
}
}
结果是:
-----------try------------3
-----------finally------------4
-----------heima------------4
return语句是立刻返回调用者处,
在以上代码执行try代码块时,遇到return语句时,
应该立刻返回到main函数,此时返回x的值应该是3,为
什么打印结果显示finall在return前执行,返回到main函数x的值为4?
作者:
刘松老师
时间:
2013-3-31 22:13
finally块中是一定会执行的代码,当java程序运行到return是会先判断是否有finally语句,如果有就执行finally块中的语句,如果没有则直接返回
作者:
黑马李超
时间:
2013-3-31 22:13
finally块就是在方法返回前执行的,因为是一定要执行的语句,因此return语句执行前就会先执行。
作者:
赵海洋
时间:
2013-3-31 23:31
在return x之后并不会执行main里的打印语句,而是先去执行finally里的代码,因为这个是必须执行的,如果先执行main函数里的打印语句就说明这段程序已经执行完了,这样不合规则,所以线执行finally里的代码,在执行main函数里的最后一句打印语句。
作者:
刘策
时间:
2013-4-1 07:37
fially只有一种一情况不会执行到就是当抛到system.exit(0);的时候,finally里的代码不会执行。
作者:
杜加璇
时间:
2013-4-1 09:04
finally里的代码块中是一定会执行的代码,除非关闭虚拟机,即system.exit(0);还有就是它会在return,前执行其不会改变返回值。
作者:
夏凡
时间:
2013-4-1 11:49
本帖最后由 夏凡 于 2013-4-1 11:50 编辑
public int test(){
try {
++x;
System.out.println("-----------try------------"+x);
return x;
}
catch (Exception e) {
throw new RuntimeException();
}
finally{
x++;
System.out.println("-----------finally------------"+x);
}
复制代码
这段代码执行的顺序是:
case1:有finally语句,必然执行!而且是在return语句之前
case2:无finally语句,遇到return语句结束并返回结果
作者:
陈丽莉
时间:
2013-4-1 18:39
若还有问题,继续追问;没有的话,将帖子分类改成【已解决】哦~
作者:
lucy198921
时间:
2013-4-1 20:41
搞定了.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2