当一个对象创建好后,java虚拟机就会给它分配一个引用自身的指针:this。所有对象的默认引用名均为this。接下来请看下列代码
class Owner{ private Dog dog; public Dog getDog() { return dog; } public void setDog(Dog dog) { this.dog = dog; } } public class Dog { private Owner owner; public Owner getOwner() { return owner; } public void setOwner(Owner owner) { if(this.owner==null) //如果原先就有主人 this.owner.setDog(null);//那么取消与原先主人的关联关系 this.owner=owner;//建立狗和新主人的关联关系 owner.setDog(this);//建立新主人和狗的关联关系 } public static void main(String[] args) { Owner owner1=new Owner(); Owner owner2=new Owner(); Dog dog1=new Dog(); dog1.setOwner(owner1);//建立了dog1和owner1的关联关系 dog1.setOwner(owner2);//建立了dog1和owner2的关联关系 } }
在程序中,this关键字有以下用法:
1)在一个实例方法内,局部变量或参数和实例变量同名,实例变量被屏蔽,因此采用this.owner
的方式来指代实例变量。
2)在一个实例方法内,访问当前实例的引用,例如在Dog类的setOwner()方法中有以下代码:
owner.setDog(this)//this代表当前的Dog对象
3)在类的构造方法中通过this语句调用这个类另一个构造方法。请看以下代码
public class Employee { private String name; private int age; //当雇员的姓名和年龄都已知时,就调用此构造方法 public Employee(String name,int age){ this.name=name; this.age=age; } //当雇员的姓名已知而年龄未知时,就调用此构造方法 public Employee(String name){ this(name,18);//调用public Employee(String name,int age)构造方法 } //当雇员的姓名和年龄都未知时,就调用此构造方法 public Employee(){ this("无名氏");//调用public Employee(String name)构造方法 } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
用this语句调用其他构造方法时,必须遵循以下语法规则:
1)假如在一个构造方法中使用this语句,那么它必须作为构造方法的第一条语句。
2)只能在一个构造方法中用this语句来调用类的其他构造方法,为不能在实例方法中用this语句来调用类的其他构造方法。
3)只能用this语句来调用其他构造方法,而不能用方法名来直接调用构造方法。