我希望通过单独使用this.field和字段来更好地理解引用类字段的区别,如
this.integerField = 5;
和
integerField = 5;
答案 0 :(得分:7)
this
关键字是指当前的object
。
通常我们使用this.memberVariable
来区分成员变量和局部变量
private int x=10;
public void m1(int x) {
sysout(this.x)//would print 10 member variable
sysout(x); //would print 5; local variable
}
public static void main(String..args) {
new classInst().m1(5);
}
关闭具体问题,
在this
中使用Overloaded constructors
:
我们可以使用它来调用重载的构造函数,如下所示:
public class ABC {
public ABC() {
this("example");to call overloadedconstructor
sysout("no args cons");
}
public ABC(String x){
sysout("one argscons")
}
}
答案 1 :(得分:4)
使用this
关键字可以消除成员变量和本地变量之间的歧义,例如函数参数:
public MyClass(int integerField) {
this.integerField = integerField;
}
上面的代码片段将局部变量integerField
的值分配给具有相同名称的类的成员变量。
有些商店采用编码标准,要求所有成员访问都使用this
进行限定。这是有效的,但没有必要;在不存在冲突的情况下,删除this
不会改变程序的语义。
答案 2 :(得分:1)
它完全一样。因为你经常输入this.xyz
它是一个快捷方式,如果有一个按该名称的字段并且没有一个局部变量会影响它,那就意味着同样的事情。
答案 3 :(得分:1)
当您使用实例方法时,可能需要指定引用变量的范围。例如:
private int x;
public void method(int x) {
System.out.println("Method x : " + x);
System.out.println("Instance x : " + this.x);
}
虽然在这个例子中,你有两个x
变量,一个是局部方法变量,一个是类变量。您可以用this
区分两者来指定它。
有些人在使用类变量之前总是使用this
。虽然没有必要,但它可以提高代码的可读性。
对于多态性,您可以将父类称为super
。例如:
class A {
public int getValue() { return 1; }
}
class B extends A {
// override A.getValue()
public int getValue() { return 2; }
// return 1 from A.getValue()
// have we not used super, the method would have returned the same as this.getValue()
public int getParentValue() { return super.getValue(); }
}
关键字this
和super
都取决于您使用它的范围;它取决于您在运行时使用的实例(对象)。
答案 4 :(得分:0)
虽然它们的外观和行为相同,但在字段和方法参数之间共享相同的名称时会有所不同,例如:
private String name;
public void setName(String name){
this.name = name;
}
name
是传递的参数,this.name
是正确的类字段。
请注意,键入this.
...会提示您在许多IDE中列出所有类字段[和方法]。
答案 5 :(得分:0)
在实例方法或构造函数中,这是对它的引用 当前对象 - 其方法或构造函数所在的对象 调用。您可以从内部引用当前对象的任何成员 使用它的实例方法或构造函数。
因此,当您在对象中调用方法时,调用如下所示:
public class MyClass{
private int field;
public MyClass(){
this(10); // Will call the constructor with a int argument
}
public MyClass(int value){
}
//And within a object, the methods look like this
public void myMethod(MyClass this){ //A reference of a object of MyClass
this.field = 10; // The current object field
}
}