黑马程序员技术交流社区
标题:
两段代码的区别
[打印本页]
作者:
马林康
时间:
2012-7-18 15:54
标题:
两段代码的区别
本帖最后由 马林康 于 2012-7-18 16:46 编辑
class Test {
public static void main(String[] args){
System.out.println(method(5));
}
public static int method(int num){
try{
return num;
}finally{
System.out.println("fially执行了"+ ++num);
return num;
}
}
}
复制代码
class Test {
public static void main(String[] args){
System.out.println(method(5));
}
public static int method(int num){
try{
return num;
}finally{
System.out.println("fially执行了"+ ++num);
}
}
}
复制代码
作者:
乞文超
时间:
2012-7-18 16:24
360截图20120718162121273.jpg
(18.91 KB, 下载次数: 19)
下载附件
2012-7-18 16:23 上传
作者:
孙新强
时间:
2012-7-18 16:29
你是不是疑惑 try中出现return语句 finally会不会执行的问题啊
无论程序中出现什么问题 finally语句块 都是会被执行到的
就上述两段程序代码分析:
两段代码中 try语句块中都出现了 return语句
但是程序执行时 执行到return语句时 return内容会首先被记录起来 并且会继续往下执行finally
语句块 执行过后 return内容再返回过去
至于两个程序的区别 就是 第二个程序中 finally语句块中出现了 return语句 他将try语句块中的return覆盖了
作者:
位雪
时间:
2012-7-18 16:32
我自己的理解是第一段代码finally中多了return语句,finally中是必须执行的语句,返回num是System.out.println("finally执行了"+ ++num);执行后的num值6,覆盖try中返回值5
第二段代码finally中没有return语句,执行try中的返回num值5。
我自己的理解不知道对不。。。
作者:
袁錦泰
时间:
2012-7-18 16:34
大家一起來找茬....
作者:
程潇
时间:
2012-7-18 16:38
第一段代码:
return num;执行了两遍,两个return之间对num有一个自增的操作,最终取的是第二次返回的num值6
第二段代码:
return num;只执行了try中的return,虽然finnaly块中对num进行了自增,但是返回的依然是自增前的num值5
通过运行代码和分析,可以看出尽管try中已经return了num值,但是这个值仍然能够改变,若想返回改变后的值,只需在finnaly中再return一次即可。
作者:
张水荣
时间:
2012-7-18 16:42
本帖最后由 张水荣 于 2012-7-18 16:48 编辑
这是程序运行的顺序问题,try{}finally{}语句首先执行的是try{}里面的语句,之后执行finally{}中的语句,并且不管try{}中的语句有没有全部执行,最后一定会执行fianlly中的语句。前一段代码在执行了try{}里面的语句后,接下来执行的是finally{}里面的语句,而没有直接跳出方法执行System.out.println()方法,所以第一次执行的是finally {}里面的System.out.println()方法,执行完后,num的值已经变成6,并且此时又将6返回了,所以前者代码返回的是6,后者代码因为在num的值没有改变之前已经返回,所以当num的值变为6时,返回的仍然是5.
作者:
陌花╮有意、
时间:
2012-7-18 17:30
finally中是一定会被执行的代码,就算有try中有return,在return之前也会执行finally
第一个程序,结果:
fially执行了6
6
在执行try中的return之前先执行finaly,由于finally中有return,所以finally抓住了机会 将结果num+1后直接返回,然后再主函数中也打印6
第二个程序,结果:
fially执行了6
5
在try中return之前依旧执行了finally,由于此时finally中没有return 所以try中的return记录的仍然是num没有自增之前的结果5
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2