本章节目标:
理解this是什么,this能用在哪里,不能用在哪里,this什么时候可以省略,什么时候不能省略,以及怎么通过构造方法调用当前类中其它的构造方法。掌握静态代码块的执行时机,变量什么时候声明为静态变量,什么时候声明为实例变量,方法什么时候声明为实例方法,什么时候声明为静态方法,以及静态方法中为何不能直接访问实例变量和实例方法。
知识框架:
public class Customer {
private String name;
public Customer(){
}
public Customer(String _name){
name = _name;
}
public void setName(String _name){
name = _name;
}
public String getName(){
return name;
}
}
public class CustomerTest {
public static void main(String[] args) {
Customer jack = new Customer("jack");
Customer rose = new Customer("rose");
}
}
以上程序的内存结构图如下所示:
图11-1:this内存图
this可以看做一个变量,它是一个引用,存储在Java虚拟机堆内存的对象内部,this这个引用保存了当前对象的内存地址指向自身,任何一个堆内存的java对象都有一个this,也就是说创建100个java对象则分别对应100个this。通过以上的内存图,可以看出“jack引用”保存的内存地址是0x1111,对应的“this引用”保存的内存地址也是0x1111,所以“jack引用”和“this引用”是可以划等号的。也就是说访问对象的时候jack.name和this.name是一样的,都是访问该引用所指向对象的name属性。
this指向“当前对象”,也可以说this代表“当前对象”,this可以使用在实例方法中以及构造方法中,语法格式分别为“this.”和“this(..)”。this不能出现在带有static的方法当中。