我真的不明白用“这个” Java中的。 如果有人可以帮助我澄清我真的很感激它。
在这个网站上,它说: http://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html
“在一个实例方法或构造,这是当前的对象的引用。 - 其方法或构造被调用的对象可以参考从一个实例方法或通过使用该构造中当前对象的任何成员。 “
并且它提供了以下例子:
例如,Point类是这样写的
public class Point {
public int x = 0;
public int y = 0;
//constructor
public Point(int a, int b) {
x = a;
y = b;
}
}
但它也可以写成这样:
public class Point {
public int x = 0;
public int y = 0;
//constructor
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
然而,我还是不完全理解为什么X = A可能已被写成this.x = X? 为什么不是this.x =一个? 为什么左侧的X?
我很抱歉,但我很新到Java。 我无聊的专家们表示歉意。
如果具有相同的名称,对象的属性一些变量/参数的定义,它“重叠”该属性的名称,应使用this.var_name。
所以,是的,它可以写成this.x = a
,但有些多余。
在第二示例中的一个参数被命名为x。 通过引用this.x,你指的是类中的方法是一部分的x字段/属性。 它可以作为阅读:Point.x =参数x
这是被用于区分所述两个,使得代码明确的含义。
它不this.x =一个因为没有一个“A”在第二个例子。 问题的关键是,你可以重复使用相同的变量名,这是减少混乱: - |
这个想法是非常清楚,你正在为值x
和y
在你的构造。
现在的问题是,由于是在构造函数中的作用域规则, x
指的是传递的值,而不是现场x
。 因此x = x
导致参数被分配其自己的值和阴影字段不变。 这通常不是什么都想。
因此,需要一种机制,说“我需要另一个 X不是一个这里立即可见”。 这里this
是指当前对象-所以this.x
指的是外地在当前对象, super
指对象这个对象延伸,从而你可以得到一个场“得更高”。
this
是对当前对象的引用,让你访问它像任何其他对象- this.x
是x
的属性this
。 因此, x
是传入的参数,它分配给this.x
。
这是命名空间 - 对于一个变量的名称只适用给定的代码块中的想法。 在Java中,你在哪里中的一个函数属于类的工作,你的命名空间这个类里面,但是,如果你有另一个同名的变量作为自变量,它将优先,而你,而不是访问属性通过this
。
this
也可以以其他方式使用。 例如,假设我想提请当前对象的屏幕在一个虚构的图书馆,从类中,我可以这样做:
window.draw(this)
您也可以拨打功能
this
使得我们可以参考我们目前“内部”的对象,所以我们可以把当前对象作为参数。 这是非常有用的。 (没有双关语意)。
“本”是您使用的是当前对象的引用。 当你有一个字段和参数之间的名称冲突可以使用它。 参数优先领域。
没有冲突,没有必要为此:
public Point(int a, int b) {
x = a;
y = b;
}
但是,这会工作,太:
public Point(int a, int b) {
this.x = a;
this.y = b;
}
名称冲突,需要使用“这个”:
public Point(int x, int y) {
this.x = x;
this.y = y;
}
如果你只做
public Point(int x, int y) {
x = x;
y = y;
}
那么你只需指定其自身的价值,从而有效地不执行任何操作参数。
有关键字“这”更多的用途。
“这”是一个隐藏的“论据”获取传递给你,这样的对象进行操作的方法知道哪个对象正是他们要操作的。
现在想象一下,你通过名为“X”的说法,但该类确实已经定义的变量名称。 怎么了 ? 嗯,名字x存在“属于”对象和自变量x是不一样的数据对象但他们共享的名称。
为了消除歧义,你需要明确地说:“this.x”,它告诉你在谈论的是已经属于“此”对象,其x编译器。 (也就是说,你想操作上当前对象。)
在第二个例子中,参数给构造不是a
和b
; 它们被改变为x
和y
,和this.x = x;
意思是“指定此Point类实例的成员变量x
传递给构造函数的值x
”。
这确实与Java编译器如何通过他们的名称标识变量做。 功能(formaal)参数名称前面类的成员变量。 在第一个例子中,形式参数名称是A和B,他们不与成员变量x和y这样写碰撞
x = a;
是逻辑为x只能意味着成员变量类Point。
在第二个实施例X既指正式的参数名称和所述成员变量。 函数体内编写x指所以如果你需要,以指成员变量x其他方式的参数。 这是通过在“本”关键字访问明确的成员来完成。