目前,我正在从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);
}
}
答案 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