1

我想更好地理解通过单独使用 this.field 和 field 来引用类字段有什么区别,如

this.integerField = 5;

integerField = 5;
4

6 回答 6

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);

   }

从具体问题出发,使用thisIn Overloaded constructors

我们可以使用它来调用重载的构造函数,如下所示:

public class ABC {
     public ABC() {
      this("example");to call overloadedconstructor
      sysout("no args cons");
     }
      public ABC(String x){
         sysout("one argscons")
        }

 }
于 2012-10-30T00:03:52.333 回答
4

使用this关键字可以消除成员变量和局部变量之间的歧义,例如函数参数:

public MyClass(int integerField) {
    this.integerField = integerField;
}

上面的代码片段将局部变量的值赋给integerField了同名类的成员变量。

一些商店采用编码标准,要求所有会员访问都必须符合this. 这是有效的,但没有必要;在不存在冲突的情况下,删除this不会改变程序的语义。

于 2012-10-30T00:07:11.340 回答
2

当您在实例方法中时,您可能需要指定从哪个范围引用变量。例如 :

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您使用它的范围;它取决于您在运行时使用的实例(对象)。

于 2012-10-30T00:07:51.723 回答
1

完全一样。因为您经常键入this.xyz它是一个快捷方式,如果存在该名称的字段并且没有隐藏它的局部变量,则意味着相同的事情。

于 2012-10-30T00:03:43.907 回答
0

尽管它们的外观和行为相同,但在字段和方法参数之间共享相同名称时会有所不同,例如:

private String name;

public void setName(String name){

    this.name = name;

}

name是传递的参数,并且this.name是正确的类字段。请注意,键入this.... 会提示您列出许多 IDE 中的所有类字段 [和方法]。

于 2012-10-30T00:09:49.370 回答
0

来自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
    }

}
于 2012-10-30T00:14:11.943 回答