黑马程序员技术交流社区
标题:
finally语句
[打印本页]
作者:
王宝龙
时间:
2012-9-14 14:08
标题:
finally语句
本帖最后由 王宝龙 于 2012-9-23 22:14 编辑
class FuShuException extends Exception
{
}
class ExceptionA
{
private double result;
public void div(int a,int b)throws FuShuException
{
if(b==0)
{
throw new FuShuException();
}
result = a/b;
}
public double getResult()
{
return result;
}
}
class ExceptionDemo
{
public static void main(String [] arge)
{
ExceptionA a = new ExceptionA();
System.out.println("fun()返回值:"+fun(a));
System.out.println("over");
}
public static int fun(ExceptionA a)
{
try
{
a.div(4,0);//<font color="red">这里如果是(4,1)返回值仍然是2!!!!!不解!!!</font>
System.out.println(a.getResult());
return 1;
}
catch(FuShuException e)
{
System.out.println(e.getMessage());
System.out.println(e);
}
finally
{
return 2;
}
}
}
复制代码
如果这样a.div(4,0)返回值为2。可是这样a.div(4,1)的话返回值还是2为什么不是1呢?这是为什么?谢谢各位帮忙看一下!!
作者:
尤圣回
时间:
2012-9-14 14:14
因为他先把1取出来放在内存中 然后执行到finally把2取出来放到内存中 2把1覆盖了
作者:
陈俊来
时间:
2012-9-14 14:24
在try{}catch{}finally{}中finally{}中的内容无论如何都是要执行的,
不管前面try{}中还是catch{}中结果return什么值,到后来都会执行finally{}中的return 2;
所以就这样显示咯。
希望有帮助
作者:
舒远
时间:
2012-9-14 14:31
finally块无论如何都会被执行,除非jvm退出,进程挂掉了。
那么你的代码中有两个return语句,按照先后顺序,finally最后执行return,try中的return的值就被finally中的return给覆盖了。
所以无论传递什么参数都将返回2.
作者:
苏文俊
时间:
2012-9-14 14:40
因为finally语句是在try或者catch中的return语句之前执行的,所以结果是2,也就是说在正常情况下,finally都会被执行。
如果在catch中程序就return,那么finally就不会被执行,所以,如果try,catch中有控制转移语句,比如return,break和continue,finally会在这些语句执行前先被执行!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2