在学习java的时候就遇到了这个关键字this,刚开始理解的时候感觉特别困难啊,因为对面向对象的思想还不习惯。感觉用了很久之后,对this的理解已经很彻底了,但我看了《Java编程思想》之后发现我错了,其实并不是我理解的那样。
书上有一个例子
public class Test {
public static void main(String[] args) {
Cat a = new Cat();
Cat b = new Cat();
a.peel(1);
b.peel(2);
}
}
class Cat
{
void peel(int i)
{
//to do
}
}
如果只有一个peel方法,如何知道是被a还是被b所调用的呢?
其实编译器做了一些手脚,它把“所操作对象的引用”作为第一个参数传递给peel()。
a.peel(a,1);
b.peel(b,2);
大概就是这么个意思,所以在peel方法里面是可以知道是被谁调用的。但是由于是编辑器内部实现的,所有没有标识符,但是为此有一个专门的关键字:this。this关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用。用这句话来想的话很多问题都可以相通了。
this的用法和其他对象引用并无不同。但如果在方法内部调用同一个类得另一个方法时,就不必使用this了,直接调用即可。在构造函数中经常使用this.arg = arg用来区别,当然不写也行。
注:static方法中不存在this