内部类和局部变量

2022-09-03 16:53:20

为什么我需要声明一个,就好像我在方法中定义的东西需要使用它一样?local variablefinalInner class

例:

class MyOuter2 {

private String x = "Outer2";

void doStuff() {
    final String y = "Hello World";

    final class MyInner {

        String z = y;

        public void seeOuter() {
            System.out.println("Outer x is "+x);
            System.out.println("Local variable is "+y);
            MyInner mi = new MyInner();
            mi.seeOuter();
        }
    }
}

}

为什么字符串需要是最终常量?它如何影响?y


答案 1

局部变量始终存在于堆栈上,moment方法之上所有局部变量都消失了。

但是,即使在方法结束后,您的内部类对象也可能在堆上(假设实例变量保留在引用上),因此在这种情况下,它无法访问您的局部变量,因为它们已经消失,除非您将它们标记为最终变量。


答案 2

答案是两者处于不同的范围内。因此,该变量可以在内部类访问它之前更改。让它成为最终版本可以防止这种情况发生。


推荐