一个基础的JAVA问题,面试的时候遇到的。

OutMan 2011-06-13 11:23:44
public class Test4
{
public int print()
{
int value = 1;
BufferedReader br = null;
try
{
if (true)
{
return value;
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
value = 2;
}
return value;
}

/**
* @param args
*/
public static void main(String[] args)
{
Test4 test4 = new Test4();
System.out.println(test4.print());
}
}

此程序打印出来的结果是什么?并且为什么?
...全文
154 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
OutMan 2011-06-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 a21768541 的回复:]
没错 这个题目就考try{}catch{}finally{}的执行顺序。。
[/Quote]

但是运行的结果确实是1
yangxuan18 2011-06-15
  • 打赏
  • 举报
回复
在try语句中,在执行return语句时,要返回的结果已经准备好了,就在此时,程序转到finally执行了。
在转去之前,try中先把要返回的结果存放到不同于a的局部变量中去,执行完finally之后,在从中取出返回结果,因此,即使finally中对变量a进行了改变,但是不会影响返回结果。
但是,如果在finally子句中最后添加上return a会怎样呢?
public static int print()
{
int value = 1;
try
{
if (true)
{
return value;
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
value = 2;
return value;
}
}

结果返回2。
a21768541 2011-06-15
  • 打赏
  • 举报
回复
没错 这个题目就考try{}catch{}finally{}的执行顺序。。
OutMan 2011-06-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bufeng711 的回复:]
打印结果 为 1

我分析结果如下 finally 是最后执行的,是
执行if (true)
{
return value;
}
再执行的,这个时候已经人return (value)1;再在finally 中赋值也没用了
[/Quote]

finally不是在return之前执行吗?
xflr123 2011-06-15
  • 打赏
  • 举报
回复
有不少时候都是这样的 给你写了一堆的代码 其实主要的只要的只是那一小部分而已
有点笨 2011-06-15
  • 打赏
  • 举报
回复
1,理由如上
司机 2011-06-15
  • 打赏
  • 举报
回复
结果肯定是1 ,先return value了,再进finally value赋值已无效。不会执行到下面的return。所以结果是1.
LS正解~!
bufeng711 2011-06-15
  • 打赏
  • 举报
回复
打印结果 为 1

我分析结果如下 finally 是最后执行的,是
执行if (true)
{
return value;
}
再执行的,这个时候已经人return (value)1;再在finally 中赋值也没用了

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧