本帖最后由 王国伟. 于 2013-2-7 20:42 编辑
一般来说 finally 块区域中的代码都是不能够通过重新赋值的方式来改变 try 区域和catch中 return 语句的返回值。但是有一种情况例外,那就是在 finally 内部使用 return 语句。
class test
{
public static void main(string[] args)
{
int a=test();
system.out.println(a); //输出的结果是3
}
public static int test()
{
try
{
string s=null;
s.substring(0,1);
return 1;
}
catch(exception e)
{
return 2;
}
finally //如果没有finally,则输出2
{
return 3;
}
}
}
finally 内部使用 return 语句后,它影响(覆盖了) try 区域和catch中 return 语句的返回值。之所以出现这种现象的真正原因是,由于 finally 区域中的代码先于 return 语句被执行,但是,如果此时在 finally 内部也有一个 return 语句,这将会导致该函数直接就返回了,而致使 try 和catch作用域中的 return 语句再也得不到执行机会(实际就是无效代码,被覆盖了)。
强烈建议不要在 finally 内部使用 return 语句。 |