[英]Shadowing instance variables with local variables in Java
我已经读过“如果一个变量的作用域更近,则该变量将被遮盖”。 我发现此Point类带有一个构造函数作为示例:
public class Point {
public int x = 0;
public int y = 0;
public Point(int x, int y) {
x = x;
y = y;
}
}
然后,我在下面的CreateObjectDemo类中创建了Point类的对象,并打印了变量x的值。
public class CreateObjectDemo {
public static void main(String[] args) {
Point originOne = new Point(23, 94);
System.out.println(originOne.x);
}
}
运行编译器后,它显示0。但是为什么不显示23? 我认为构造函数中的“ x = x”就像“ 23 = 23” 。 我是否误解了阴影变量的定义?
我认为构造函数中的“ x = x”就像“ 23 = 23”。
在构造函数中,简单名称x
的含义始终只是参数。 因此,分配x = x
的构造函数将值x
参数,并将其分配给 x
参数为好。 实例变量永远不会被触及。 (尚不清楚23 = 23;
意思,因此我无法确定这是否正确。)基本上,这是一个禁忌,某些IDE会向您发出警告。
要强制将其复制到实例变量,您需要:
this.x = x;
(当然,对于y
同样如此。)
0
是int
类型变量的默认值,并且如警告所言,您在构造函数中隐藏了变量,因此从未将对象变量分配给该变量。
public Point(int x, int y) {
x = x; //assign value of local x to local x
y = y; //assign value of local y to local y
}
您需要使用this
关键字来引用对象变量x
和y
而不是局部变量:
public Point(int x, int y) {
this.x = x; //assign value of local x to object variable x
this.y = y; //assign value of local y to object variable y
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.