【发布时间】:2012-06-29 04:42:29
【问题描述】:
我见过将关键字this 作为输入参数传递的代码。
例如:
getContainer(this);
关键字this 是什么意思?我听说它指的是类本身的一个实例(或类似的东西),但它是如何工作的?
【问题讨论】:
-
这是一个参数,而不是一个参数。
标签: java parameters this keyword
我见过将关键字this 作为输入参数传递的代码。
例如:
getContainer(this);
关键字this 是什么意思?我听说它指的是类本身的一个实例(或类似的东西),但它是如何工作的?
【问题讨论】:
标签: java parameters this keyword
From 15.8.3 of the java specification:
关键字 this 只能用在实例方法的主体中, 实例初始化器或构造器,或在 类的实例变量。如果它出现在其他任何地方, 发生编译时错误。当用作主要表达式时, 关键字 this 表示一个值,它是对对象的引用 实例方法被调用(§15.12),或被调用的对象 建造。 this 的类型是关键字所在的 C 类 发生这种情况。在运行时,引用的实际对象的类 可以是 C 类或 C 的任何子类。
[...]
关键字 this 也用于特殊的显式构造函数 调用语句,可以出现在语句的开头 构造函数主体(第 8.8.7 节)。
是的,一个类可以使用 this 关键字来引用自己。当方法中的局部变量与类成员变量同名时,也需要this 关键字,以区分两者。
【讨论】:
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() {
}
}
【讨论】:
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 个类的职责,同时保持它们耦合。
【讨论】:
在 java 中,我们有类并创建这些类的实例(对象)。因此,当对象需要指向或引用自身时,就会使用 this 关键字。
【讨论】: