为什么 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。