在方法或构造函数中使用此关键字时,此关键字位于=符号的左侧或右侧是否重要

时间:2016-01-03 01:34:26

标签: java this

我是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 =
    }
}

3 个答案:

答案 0 :(得分:3)

是的,这很重要。 this引用当前对象,因此this.y = y将对象的字段y设置为传递给构造函数的值。 x = this.x设置传递给构造函数的局部变量等于对象的本地x字段的值。然后,当构造函数退出时,该局部变量超出范围(保持类的字段不变),因此不会有净更改。

您几乎总是想使用this.x = x,因为构造函数的目的是初始化对象的所有必需字段。

答案 1 :(得分:2)

是。 this.xx不同,因为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关键字的原因。

希望这会有所帮助。坚持下去。随着时间的推移,你会变得更好。 ; - )