我想更好地理解通过单独使用 this.field 和 field 来引用类字段有什么区别,如
this.integerField = 5;
和
integerField = 5;
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
In Overloaded constructors
:
我们可以使用它来调用重载的构造函数,如下所示:
public class ABC {
public ABC() {
this("example");to call overloadedconstructor
sysout("no args cons");
}
public ABC(String x){
sysout("one argscons")
}
}
使用this
关键字可以消除成员变量和局部变量之间的歧义,例如函数参数:
public MyClass(int integerField) {
this.integerField = integerField;
}
上面的代码片段将局部变量的值赋给integerField
了同名类的成员变量。
一些商店采用编码标准,要求所有会员访问都必须符合this
. 这是有效的,但没有必要;在不存在冲突的情况下,删除this
不会改变程序的语义。
当您在实例方法中时,您可能需要指定从哪个范围引用变量。例如 :
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
您使用它的范围;它取决于您在运行时使用的实例(对象)。
完全一样。因为您经常键入this.xyz
它是一个快捷方式,如果存在该名称的字段并且没有隐藏它的局部变量,则意味着相同的事情。
尽管它们的外观和行为相同,但在字段和方法参数之间共享相同名称时会有所不同,例如:
private String name;
public void setName(String name){
this.name = name;
}
name
是传递的参数,并且this.name
是正确的类字段。请注意,键入this.
... 会提示您列出许多 IDE 中的所有类字段 [和方法]。
来自Java 教程:
在实例方法或构造函数中,this 是对当前对象的引用——调用其方法或构造函数的对象。您可以使用 this 从实例方法或构造函数中引用当前对象的任何成员。
因此,当您在对象中调用方法时,调用看起来像这样:
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
}
}