本帖最后由 赵然 于 2013-5-3 23:30 编辑
package com.itheima;
class FinRe
{
public static int getNum()
{
int num = 1;//定义一个值 以对其进行操作来展示其值来
try
{
System.out.println("要返回的num的值是:"+num);
return num;//return一个值
}
finally //finally操作
{
num = 0;//对num进行改变
System.out.println("Finally中num="+num);
/*
如果finally中有return,则返回的是这个值 这样finally就会改变原本要返回的属性的值,
也就是说得不到预期的值了,即finally改变了所需返回return的结果。
*/
//return num;
}
}
public static void main(String[] args)
{
System.out.println("num = "+getNum());
}
}
虽然可以证明fianlly在程序中先于return 执行 但是却推翻了finally 不能改变return 的值。这个问题纠结了。与此同时我又郁闷了两个返回值,虚拟机是怎么处理的,为什么没有神经错乱直接编译失败或者这种返回值覆盖算不算是一个bug——类似于finally直接“吃掉了”前面代码。当然如果这种思路,这段代码原本就有问题还请大神们给提出来,先谢过! |