下面的代码运行两个
我的理解:“这个”被用来标识 - “把这个值只是‘我’的对象”。 当两个工作,为什么人们通常用在二传手“这个”?
码:
public class PlayingWithObjects
{
public static void main(String[] args)
{
SomeClass classObj = new SomeClass(10);
System.out.println("classObj.getVar: " + classObj.getVar() );
classObj.setVar(20);
System.out.println("classObj.getVar: " + classObj.getVar() );
classObj = new SomeClass(30);
System.out.println("classObj.getVar: " + classObj.getVar() );
}
}
class SomeClass
{
private int var;
public SomeClass(int putVar)
{
var = putVar;
}
public int getVar()
{
return var;
}
public void setVar(int putVar)
{
// var = putVar; // also works
this.var = putVar;
}
}
我是否理解“这个”正确? 哪里是“本”使用和无法替代的。 请张贴一些代码。
因为人们喜欢用这两个方法的参数和实例变量相同的变量名-在这种情况下,你需要this
来区分。
public void setX(int x) {
this.x = x;
}
你可以使用this
,如果你用同样的方法参数标识符字段,但是如果你根本就没有使用相同的名称也可避免。
没有使用相同的名称是一个比较普遍的做法,以避免混乱和阴影。 因此,任何参考this
:如果是setter可以有更好的命名标准来代替inParameter
,例如。
public void setX(int inX) {
x = inX;
}
其他使用this
将是显式调用构造函数 。 这是不能用简单的命名约定来替换形式:
public class Foo {
private String name;
public Foo() {
this("");
}
public Foo(String inName) {
name = inName;
}
}
也有可能是要回报你正在使用的实例的情况。 这也是东西, this
可以让你做:
return this;
有2个情况下,我知道的,除了案件KTM提到(我认为这是显而易见的,你已经知道):
只是使它很清楚,他们指的是当前对象的成员。
void foo(int x) { this.y = x; // No mistaking that y belongs to the object }
如果在其他对象中的匿名内部类是(例如:className类),你可以使用ClassName.this获得封闭对象的实例。 这样做的原因(没有双关语意)是,内类的内部,这将参照内部类。
SomeInnerClass myObj = new SomeInnerClass() { void bar() { this.y = 0; // this refers to the SomeInnerClass object OuterClass.this.y = 0; // OuterClass.this refers to the enclosing class OuterClass object } };
像KTM提到,制定者往往使用相同的名称作为参数的领域。 在这种情况下,参数阴影的字段名称,所以
public void setX(int x) {
x = x;
}
将只设置参数本身而不是字段设置为参数。
如果一个类具有一些名称(比如一个实例变量myVar
),以及方法具有完全相同的名称(一个局部变量myVar
),则向可变任何引用将引用的局部变量。 在这样的情况下,如果我们要指定类的实例变量,我们需要说this.myVar
。 如前所述,当我们希望有制定者在参数名称是一样的,它设置了实例变量,这是特别有用:
public void setMyVar(int myVar) {
this.myVar = myVar; // If we said myVar = myVar;, we'd just set the local
// variable to itself, which would NOT be what we want.
}