使用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 }