任何人都可以解释这个与Java中的阴影相关的代码吗?

Ris*_*our 3 java shadowing

在阅读有关嵌套类的Oracle文档时,我发现这段代码的输出我无法理解.有人可以解释一下吗?

public class ShadowTest {

    public int x = 0;

    class FirstLevel {

        public int x = 1;

        void methodInFirstLevel(int x) {
            System.out.println("x = " + x);
            System.out.println("this.x = " + this.x);
            System.out.println("ShadowTest.this.x = " + ShadowTest.this.x);
        }
    }

    public static void main(String... args) {
        ShadowTest st = new ShadowTest();
        ShadowTest.FirstLevel fl = st.new FirstLevel();
        fl.methodInFirstLevel(23);
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是此示例的输出:

x = 23
this.x = 1
ShadowTest.this.x = 0 //why is 0 printed here? why not 1 because "this" is the object of FirstLevel class.
Run Code Online (Sandbox Code Playgroud)

原始代码可以在这里找到

Era*_*ran 6

局部变量x阴影this.xShadowTest.this.x.

内部类(this.x)的实例变量隐藏了封闭类的实例变量(可以通过它访问ShadowTest.this.x).

System.out.println("x = " + x); // prints the local variable passed to the method
System.out.println("this.x = " + this.x); // prints the instance variable of the inner class
System.out.println("ShadowTest.this.x = " + ShadowTest.this.x); // prints the instance variable of the enclosing class instance
Run Code Online (Sandbox Code Playgroud)