将此作为参数传递

时间:2012-06-29 04:42:30

标签: java parameters this keyword

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

getContainer(this);

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

5 个答案:

答案 0 :(得分:2)

From 15.8.3 of the java specification:

  

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

     

[...]

     

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

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

答案 1 :(得分:1)

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() {

    }
}

答案 2 :(得分:1)

Java中的关键字this是引用当前对象的引用变量。 它可用于引用当前类实例变量 它可用于调用或启动当前类构造函数 它可以作为方法调用中的参数传递 它可以在构造函数调用中作为参数传递 它可用于返回当前的类实例

this是对当前对象的引用,其方法正在被调用。 您可以使用this关键字来避免实例/对象的方法/构造函数中的命名冲突。

答案 3 :(得分:0)

也可以传递

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        

    }
}

通过这种方式,您可以分离两个类的职责,同时保持它们的耦合。

答案 4 :(得分:-1)

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