Java中“field”和“this.field”的区别

时间:2012-10-30 00:02:07

标签: java

我希望通过单独使用this.field和字段来更好地理解引用类字段的区别,如

this.integerField = 5;

integerField = 5;

6 个答案:

答案 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(); }   
}

关键字thissuper都取决于您使用它的范围;它取决于您在运行时使用的实例(对象)。

答案 4 :(得分:0)

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

private String name;

public void setName(String name){

    this.name = name;

}

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

答案 5 :(得分:0)

来自Java tutorials

  

在实例方法或构造函数中,这是对它的引用   当前对象 - 其方法或构造函数所在的对象   调用。您可以从内部引用当前对象的任何成员   使用它的实例方法或构造函数。

因此,当您在对象中调用方法时,调用如下所示:

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
    }

}