黑马程序员技术交流社区
标题:
为什么finally语句会在这个return后面执行 求解释 为什么结果是5
[打印本页]
作者:
付鹏
时间:
2012-3-9 23:28
标题:
为什么finally语句会在这个return后面执行 求解释 为什么结果是5
public class T
{
public static void main(String args[])
{
T t = new T();
int b = t.get();
System.out.println(b);
}
public int get()
{
try
{
return 4 ;
}
finally
{
return 5 ;
}
}
}
这个为什么finally的语句里面会后执行 为什么结果是5? 希望大虾们给我讲清楚点
作者:
房宝彬
时间:
2012-3-9 23:33
本帖最后由 房宝彬 于 2012-3-9 23:35 编辑
就是finally是一定会被执行到的代码
作者:
王睿
时间:
2012-3-10 00:07
我觉得b应该得到了两次值,先执行try中的 return 4. b=4. 但是finally是一定会执行的,所以 有把b赋值成5了。
作者:
戚雪晖
时间:
2012-3-10 07:58
又看到小房了,哈~~
在try里,执行到return前面的时候,直接去执行finally,在finally里有return因此直接从finally跳出方法了。try里的return就不会执行。
如果finally里没有return语句,那么执行完finally就会继续执行try里的return。
作者:
小白
时间:
2012-3-10 08:30
finally在try catch 后面是不管怎样怎样都是会执行的代码!
作者:
王杰
时间:
2012-3-10 09:29
try-catch-finally语句中,如果try语句块中有return语句,那么在没有异常的情况下,在虚拟机执行到try的return之前,会先跳到finally中执行其中的代码。只有这样,才符合finally的定义:一定会执行的代码。
然后再回到try中,执行return语句。
本例中因为finally中是一个return语句,直接就返回了5,try中的return没有执行。
如果把你的代码改成这样你会更理解的:
public class T
{
public static void main(String args[])
{
T t = new T();
int b = t.get();
System.out.println(b);
}
public int get()
{
try
{
System.out.println("try语句块");
return 4 ;
}
finally
{
System.out.println("finally语句块");
//return 5 ;
}
}
}
复制代码
运行结果:
try语句块
finally语句块
4
作者:
刘豪杰
时间:
2012-3-10 10:42
try
{
}
finally
{
}
在代码中,finally里边定义的是必须要执行的代码,也就是说不管上边其他代码只想到了没有,但是finally里边的代码是一定要执行的,就本题来说,retrun 5是一定要执行的,所以结果是5
作者:
黑马张平
时间:
2012-3-10 19:25
很好,学习!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2