我一直在互联网上做一些研究,我想我几乎了解this
关键字的运作方式。我的问题是:this
什么时候是必要的功能?
我知道,如果对象的私有实例变量与其设置的另一个变量(如果它们具有完全相同的名称)区分,则它非常有用。例如:
public class SomeObject {
private int someNum;
public SomeObject() {}
public setSomeNum(int someNum) {
this.someNum = someNum;
}
}
我还从第二个答案@ using-the-keyword-this-in-java中了解到,它用于访问"嵌套"类。虽然我还没有尝试过,但这似乎是一个非常酷的主意。
这个问题是如何产生的:我正在编写一个class
来定义来自一系列属性的游戏角色:
public class Charact {
private String name;
// A ton of other private variables that represent character stats.
public Charact() {} // This one is for the main character.
public Charact(String name, /*All of the other variable parameters*/) { // This one is used for making NPCs.
this.name = name;
// Setting of all of the other variables.
}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
// All of the other getter and setter methods.
}
所以这里有一些关于我的代码的问题(与我最初的问题相关):
使用this调用setter方法,就像在this.setVariable(variable);
中一样,这是多余的,因为它会与setVariable(variable);
做同样的事情吗?
我专门用大写字母声明了所有私有实例变量,这样我就可以避免在我的setter中使用this
。我可以这样做吗(我是否打破了任何正常的命名约定?)或者我应该在setter中使用小写变量名和this
es吗?
使用this
以某种方式帮助识别某个类的实例被引用,或者它是否已经隐含在计算机中,这意味着不需要this
?
任何可以提供深度细化的答案都会非常有用,因为我上周才开始制作非静态课程。此外,这是我的第一个问题,所以我很抱歉,如果它似乎没有以正确的格式提出。
答案 0 :(得分:4)
我认为你已经掌握了this
的用途。当您需要明确指出您所指的内容时,它就可用。
这是一个新颖的例子。 (实际上并没有写这样的课程。它仅用于显示this
的用法。)
class Outer {
int value; /* #1 */
class Inner {
int value; /* #2 */
void setInnerValue(int value /* #3 */) {
// #2 #3
// vvvvv vvvvv
this.value = value;
}
void setOuterValue(int value /* #4 */) {
// #1 #4
// vvvvv vvvvv
Outer.this.value = value;
}
}
}
如果没有必要限定你所引用的内容,那么它是多余的。
this
也用于调用链中的构造函数。
class Example {
Example() { this(1); }
Example(int i) { }
}
我打破了任何正常的命名约定吗?
是的,你是。 Java中的标识符按惯例以小写字母开头(除非它们是static final
常量,通常都是大写的)。你应该遵循惯例。
答案 1 :(得分:1)
使用this来调用setter方法,就像this.setVariable(variable)
一样,通常是多余的,但这是一种很好的做法。
使用大写字母声明任何变量会让所有其他可能需要维护代码的java程序员感到困惑。我们采用公约是有充分理由的。当所有变量看起来像类时,它最终会让你感到困惑,而且你无法通过实例化告诉静态调用。
this
隐含this object
。
编辑:上述句子已从this class
答案 2 :(得分:0)
使用它很方便,因为以后你会有超级的东西。如果你不使用super而不使用它,你最终会得到凌乱的代码。