3

我见过将关键字this作为输入参数传递的代码。 例如:

getContainer(this);

关键字this是什么意思?我听说它指的是类本身的一个实例(或类似的东西),但它是如何工作的?

4

4 回答 4

4

从 Java 规范的 15.8.3 开始:

关键字 this 只能用在实例方法、实例初始化器或构造器的主体中,或者在类的实例变量的初始化器中。如果它出现在其他任何地方,则会发生编译时错误。当用作主要表达式时,关键字 this 表示一个值,该值是对调用实例方法的对象(第 15.12 节)或正在构造的对象的引用。this 的类型是关键字 this 出现的类 C。在运行时,引用的实际对象的类可能是 C 类或 C 的任何子类。

[...]

关键字 this 也用于特殊的显式构造函数调用语句,它可以出现在构造函数体的开头(第 8.8.7 节)。

所以是的,一个类可以使用 this 关键字来引用它自己。this当方法中的局部变量与类成员变量同名时,也需要该关键字,以区分它们。

于 2012-06-29T05:37:46.950 回答
2

this指当前实例调用了哪个方法,

因此它将引用传递给调用该成员方法的当前实例

class MyRunnable implements Runnable {
    Thread t;
    public MyRunnable() {
        this.t = new Thread(this); //here it passes reference to current instance of `Runnable`
    }

    public void run() {

    }
}
于 2012-06-29T04:44:38.127 回答
1

this也可以通过传递调用类的实例给被调用类。例如

public class Caller{
        public void callerClassMethod1(){
            new Called(this).
        }

        public void callerClassMethod2(){
        }
    }

class Called{
    private Caller caller;
    public Called(Caller caller){
       this.caller=caller;
    }
    public void calledClassMethod1(){
        //.... Do something before
        caller.callerClassMethod2();
        //..... Do something after        

    }
}

这样,您可以分离 2 个类的职责,同时保持它们耦合。

于 2014-10-01T04:31:08.520 回答
-2

在java中,我们有类并创建这些类的实例(对象)。因此,当对象需要指向或引用自身时,就会使用this关键字。

于 2012-06-29T05:03:07.877 回答