内部类实例变量阴影

时间:2015-09-09 06:36:41

标签: java object nested this

目前,我正在从Oracle进行嵌套类教程,在Shadowing部分,我有一些我根本不理解的东西。

方法methodInFirstLevel的第二行执行代码打印出this.x的值但是在我们已经在23的参数中传递给main方法的参数的主方法中对象实例。那么为什么int x的{​​{1}}仍然会回到1? FirstLevel关键字不应该引用对象实例吗?

this

输出结果为:

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 f1 = st.new FirstLevel();
    f1.methodInFirstLevel(23);
}

}

2 个答案:

答案 0 :(得分: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);
    }

参数x从未分配给this.x或ShadowTest.this.x, 因此两个值保持不变。

要将此.x值更改为23,您必须将其设置为

this.x =x;

答案 1 :(得分:0)

感谢user2341963然后我意识到我的疏忽,因为他错过了没有提供单一的构造函数来建议this.x = x