Java中“this”的含义是什么?

2022-08-31 07:28:45

通常,我只在构造函数中使用。this

我知道它用于标识参数变量(通过使用),如果它与全局变量具有相同的名称。this.something

但是,我不知道Java中的真正含义是什么,以及如果我使用没有点()会发生什么。thisthis.


答案 1

this引用当前对象。

每个非静态方法都在对象的上下文中运行。因此,如果你有一个这样的类:

public class MyThisTest {
  private int a;

  public MyThisTest() {
    this(42); // calls the other constructor
  }

  public MyThisTest(int a) {
    this.a = a; // assigns the value of the parameter a to the field of the same name
  }

  public void frobnicate() {
    int a = 1;

    System.out.println(a); // refers to the local variable a
    System.out.println(this.a); // refers to the field a
    System.out.println(this); // refers to this entire object
  }

  public String toString() {
    return "MyThisTest a=" + a; // refers to the field a
  }
}

然后调用将打印frobnicate()new MyThisTest()

1
42
MyThisTest a=42

因此,您可以有效地将其用于多种事情:

  • 澄清您正在谈论一个字段,当还有其他与字段同名的内容时
  • 将当前对象作为一个整体引用
  • 在构造函数中调用当前类的其他构造函数

答案 2

以下是从这里复制和粘贴,但很好地解释了关键字的所有不同用法:this

定义:Java的this关键字用于引用使用它的方法的当前实例。

以下是使用它的方法:

  1. 明确表示使用实例变量而不是静态或局部变量。那是

    private String javaFAQ;
    void methodName(String javaFAQ) {
        this.javaFAQ = javaFAQ;
    }
    

    此处,这是指实例变量。此处,局部变量的优先级很高。因此,缺少 表示局部变量。如果作为参数名称的局部变量与实例变量不同,则无论是否使用,它都表示实例变量。thisthis

  2. this用于引用构造函数

     public JavaQuestions(String javapapers) {
         this(javapapers, true);
     }
    

    这将调用具有两个参数的同一 java 类的构造函数。

  3. this用于将当前 java 实例作为参数传递

    obj.itIsMe(this);
    
  4. 与上面类似,这也可用于返回当前实例

    CurrentClassName startMethod() {
         return this;
    }
    

    注意:在上述两点的内部类中使用时,这可能会导致不需要的结果。由于这将引用内部类而不是外部实例。

  5. this可用于获取当前类的句柄

    Class className = this.getClass(); // this methodology is preferable in java
    

虽然这可以通过以下方式完成

    Class className = ABC.class; // here ABC refers to the class name and you need to know that!

与往常一样,与其实例相关联,这在静态方法中不起作用。this