黑马程序员技术交流社区
标题:
finally和return疑惑
[打印本页]
作者:
武庆东
时间:
2012-9-8 09:08
标题:
finally和return疑惑
本帖最后由 武庆东 于 2012-9-8 09:24 编辑
看到两个类输出结果,和预想的不一样!大家看一下哈
public class A
{
public static void main(String args[])
{
A t = new A();
int b = t.get();
System.out.println(b);
}
public int get()
{
try
{
return 1 ;
}
finally
{
return 2 ;
}
}
}
-------------------------输出结果----------------------
2 //
这个类输出结果不是1?
----------------------------------------------------------
public class Test {
/**
* @param args add by zxx ,Dec 9, 2008
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(new Test().test());;
}
static int test()
{
int x = 1;
try
{
return x;
}
finally
{
++x;
}
}
}
---------------输出结果------------------------------
1 //
为什么不是2?
return 语句和finally执行的先后顺序,比较上下两个类的输出结果的给出解释?
作者:
朱烈葵
时间:
2012-9-8 09:16
说实话 我找了半天 也没觉得那里不对,第一个你return两次,后来的覆盖了,如果你不信你在return1 和return2前面加上两个输出语句,就懂了
作者:
以沫
时间:
2012-9-8 09:27
其实很简单 finally 在程序中是绝对执行的 不论程序是否捕获异常 若无异常 java代码按顺序执行 所有对一段 覆盖 值为2 第二段 输出时 值为1
作者:
黑马_许芸
时间:
2012-9-8 09:36
由于try{
。。。。
}catch(){
。。。。。
}
finally{
。。。。。
}
是一种语句,最终都是会执行到finally{
。。。。。
}上,
所以第一个程序中的finally 里面的returne 2 会覆盖 try 里面的returne 1;
而第二个程序中,finally{}里面没有return 语句,只是在try{}里面返回的结果中再做了 ++的操作。
不知这样回答你是否能理解,好好踹磨下。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2