Java 将其作为参数传递

Java 将其作为参数传递,java,parameters,this,keyword,Java,Parameters,This,Keyword,我看到一些代码将关键字this作为输入参数传递。 例如: getContainer(this); 关键字这是什么意思?我听说它指的是类本身的一个实例(或者类似的东西),但是它是如何工作的呢?这个指的是调用了方法的当前实例 因此,它将引用传递给调用该成员方法的当前实例 class MyRunnable implements Runnable { Thread t; public MyRunnable() { this.t = new Thread(this); /

我看到一些代码将关键字
this
作为输入参数传递。 例如:

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

    }
}

引用已调用方法的当前实例

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

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

    }
}

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

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

关键字this只能在实例方法的主体中使用, 实例初始值设定项或构造函数,或在 类的实例变量。如果它出现在其他任何地方,则 发生编译时错误。当用作主表达式时 关键字这表示一个值,该值是对对象的引用 实例方法被调用(§15.12),或被调用的对象 构建。该类的类型是C类,其中包含关键字 这种情况发生了。在运行时,引用的实际对象的类 可以是C类或C的任何子类

[……]

关键字this也用于特殊的显式构造函数中 调用语句,它可以出现在 建造商主体(§8.8.7)

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

关键字this只能在实例方法的主体中使用, 实例初始值设定项或构造函数,或在 类的实例变量。如果它出现在其他任何地方,则 发生编译时错误。当用作主表达式时 关键字这表示一个值,该值是对对象的引用 实例方法被调用(§15.12),或被调用的对象 构建。该类的类型是C类,其中包含关键字 这种情况发生了。在运行时,引用的实际对象的类 可以是C类或C的任何子类

[……]

关键字this也用于特殊的显式构造函数中 调用语句,它可以出现在 建造商主体(§8.8.7)


是的,一个类可以用this关键字来指代它自己。当方法中的局部变量与类成员变量具有相同的名称时,还需要使用
this
关键字来区分这两个变量。

也可以传递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        

    }
}

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

也可以传递此
以将调用类的实例传递给被调用类。 比如说

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        

    }
}

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

这是一个参数而不是一个参数。这是一个参数而不是一个参数。