this指针简介
- 系统内部如何区分是哪个对象调用函数方:
Objcet a = new Object();
Object b = new Object();
a.f(1);
b.f(2);
为了能用简便的、面向对象的语法来书写代码——亦即“将消息发给对象”,编译器为我们完成了一些幕后工作。其中的秘密就是第一个自变量传递给方法 f (),而且那个自变量是准备操作的那个对象的句柄。所以前述的两个方法调用就变成了下面这样的形式(注:这是内部的表达形式,我们并不能这样书写表达式):
Objcet .f(a,1);
Objcet .f(b,2);
由于函数f()中的a,b是由编译器隐式传输的,所以我们并不能直接在函数f()中获取到对象a,b,这时候便可以通过this指针获取到“这个对象”,a和b。
- 方法内部如何区分字段名称相同但属性不同的字段:
如上所说,我们可以通过this指针获取到当前调用函数的对象,所以当字段名场相同时,可以使用this指针来区分,例如:
class TestThis {
private int d;
private int e;
public void f(int d) {
this.d = d;
}
public void f(int d, int e) {
this.f(d);
this.e = e;
}
}
因为this指针拥有的引用地址是调用改函数的对象的地址,所以this指针后面的属性d表示对象的属性,等号后面没有this带领的d时函数中的参数变量d。
- 构造器中使用this指针
因为构造器函数是用来实例化(新建)对象的,所以不存在隐式传输对象的情况,此时this指针表示的则是“当前对象”,此时使用this(d)则会调用对应的构造函数(只能调用一次,且需要在函数最开头调用,this()和superI()不能同时调用),this.e则表示当前对象的属性e。