Java 在方法或构造函数中使用此关键字时,此关键字位于=符号的左侧或右侧是否重要
我是Java新手,正在尝试学习这个关键字的概念。我的问题是,当在方法或构造函数中使用此关键字时,此关键字位于=符号的左侧或右侧是否重要Java 在方法或构造函数中使用此关键字时,此关键字位于=符号的左侧或右侧是否重要,java,this,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
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 =
}
}
对
this.x
与x
不同,因为this.x
是类的全局x
变量,而x
引用方法/构造函数中的变量,在本例中,它是参数
这意味着您必须将全局变量
This.x
设置为x
,这确实很重要。在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中。因此,这里传入(第3行)以创建对象的参数x现在将设置为0(因为这是在第1行创建的)。这可能不是您想要的
this.y=y
的意思是“从传入的y参数(第3行)中获取值,并将该值放入第2行创建的y中。因此,传入的参数y将覆盖第2行上实例化y变量的0
记住这一点的一个技巧是,我在大学里学到了把=
想象成一个总是指向左边/接收器的箭头
因此,你有:
是的,这很重要
x=this.x
在此上下文中不会执行任何操作。您是否尝试运行代码并查看发生了什么?通过运行程序并打印出值很容易找到它。如果您没有与对象变量(x)同名的参数,您可以通过将其引用为x来使用属于Point的全局x变量,但由于您有一个名为x的参数,在该方法中引用x将引用该参数。因此,您使用这个.x来引用objects变量。(局部变量总是胜过同名的类成员;这个
用于显式指示类成员。)Java中没有全局变量。字段是全局变量的永久替代项。@chrylis啊,我指的是类变量。谢谢。@ChaiTeaNunes这是一个实例变量,不是类变量(类变量用关键字static
标记)。非常感谢您的回答!它比我所希望的更详细!真的很感激!