我是Java的新手,正在尝试学习这个关键字的概念。我的问题是在方法或构造函数中使用此关键字时,此关键字位于=符号的左侧或右侧是否重要?
class Point {
public int x = 0;
public int y = 0;
public Point(int x, int y) {
x = this.x;//this on right hand side of =
this.y = y;//this on left hand side of =
}
}
答案 0 :(得分:3)
是的,这很重要。 this
引用当前对象,因此this.y = y
将对象的字段y
设置为传递给构造函数的值。 x = this.x
设置传递给构造函数的局部变量等于对象的本地x
字段的值。然后,当构造函数退出时,该局部变量超出范围(保持类的字段不变),因此不会有净更改。
您几乎总是想使用this.x = x
,因为构造函数的目的是初始化对象的所有必需字段。
答案 1 :(得分:2)
是。 this.x
与x
不同,因为this.x
是类的全局x
变量,而x
仅引用方法/构造函数中的变量,这种情况下它是参数。
这意味着您必须将全局变量this.x
设置为x
。
答案 2 :(得分:1)
确实很重要。在Java中,左侧的变量是接收右侧变量的值。
所以在你的例子中:
class Point {
public int x = 0; // line 1
public int y = 0; // line 2
public Point(int x, int y) { // line 3
x = this.x; // line 4
this.y = y; // line 5
}
}
x =this.x
说"从第1行获取x的值并将该值放入第3行的x中。所以这里你的参数x被传入(第3行)来创建你的对象现在将设置为等于0(因为那是在第1行创建的内容)。这可能不是你想要的。
this.y = y
说"从传入的y参数(第3行)中取值并将该值放入第2行创建的y中。因此传入的参数y将覆盖0,您将y变量实例化为第2行。
我记得在大学里回忆起来的一个提示是将=
视为箭头总是指向左侧/接收者。
因此你有:
x< --- this.x(注意箭头的方向)
this.y< --- y(左边始终是值的接收者)
最后,我建议您不要过多地接受代码,并记住总是想到更大的图片。
您正在创建一个名为Point的类。
为什么?因为你需要一个对象来使用。
创建此对象需要什么? X和Y坐标。
你的班级会自动知道吗?不,因此它们作为构造函数参数传入。
既然你拥有它们,你如何得到你班级的其他成员(即其他方法/变量)知道他们在那里?你必须将他们的值分配给那些this
类/对象会知道。这就是您使用this
关键字的原因。
希望这会有所帮助。坚持下去。随着时间的推移,你会变得更好。 ; - )