为什么 return 不遵守 finally 块中变量的值?
Why return is not honoring the value of variable in finally block?
finally
总是最后执行,所以语句 x = 3
应该最后执行。但是,当运行这段代码时,返回的值为2。
为什么?
class Test {
public static void main (String[] args) {
System.out.println(fina());
}
public static int fina()
{
int x = 0;
try {
x = 1;
int a = 10/0;
}
catch (Exception e)
{
x = 2;
return x;
}
finally
{
x = 3;
}
return x;
}
}
这是因为您在 catch 块中有一个 return 语句。代码 returning 来自 return 语句的值,即使在 finally 块中重新定义了该值。
那是因为 finally
块在 catch
子句之后执行。在你的 catch
中你 return x
,此时它的值为 2,它作为 return 值写入堆栈。一旦 finally
用 3 覆盖了 x
的值,return 的值就已经设置为 2。
finally
总是最后执行,所以语句 x = 3
应该最后执行。但是,当运行这段代码时,返回的值为2。
为什么?
class Test {
public static void main (String[] args) {
System.out.println(fina());
}
public static int fina()
{
int x = 0;
try {
x = 1;
int a = 10/0;
}
catch (Exception e)
{
x = 2;
return x;
}
finally
{
x = 3;
}
return x;
}
}
这是因为您在 catch 块中有一个 return 语句。代码 returning 来自 return 语句的值,即使在 finally 块中重新定义了该值。
那是因为 finally
块在 catch
子句之后执行。在你的 catch
中你 return x
,此时它的值为 2,它作为 return 值写入堆栈。一旦 finally
用 3 覆盖了 x
的值,return 的值就已经设置为 2。