java - 内部类实例变量遮蔽

标签 java object nested this

目前,我正在做 Oracle 的嵌套类教程,在影子部分我有一些我根本不理解的东西。

方法methodInFirstLevel的第二行执行代码打印出this.x的值,但在main方法中我们已经将参数23传递给了新对象实例的方法的参数。那么为什么 FirstLevelint x 仍然回到 1 呢? 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);
}

}

输出为:

x = 23
this.x = 1
ShadowTest.this.x = 0

最佳答案

该代码块中没有发生任何分配。

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 , 因此两个值保持相同。

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

this.x =x;

关于java - 内部类实例变量遮蔽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32472474/

相关文章:

java - 如何完美捕获o = object.object.object操作中的Java NullPointerException?

java - 在不处理显示器(父级)的情况下处理外壳

javascript - 在 JavaScript 中创建命名空间

javascript - 如何从 JavaScript 中的对象数组中选取属性?

c# - 简单的 C# 问题 : Nesting Classes, 辅助功能

r - R 中的嵌套 for 循环有问题

java - MAC - 错误 : Could not find or load main class (name of class)

java - 将数据从mysql转换到hbase

Javascript 对象无法与 native javascript 方法(如 match()、替换等)一起使用

javascript - 如何避免困惑的嵌套 if-else 或 switch