本章節(jié)目標(biāo):
理解this是什么,this能用在哪里,不能用在哪里,this什么時(shí)候可以省略,什么時(shí)候不能省略,以及怎么通過構(gòu)造方法調(diào)用當(dāng)前類中其它的構(gòu)造方法。掌握靜態(tài)代碼塊的執(zhí)行時(shí)機(jī),變量什么時(shí)候聲明為靜態(tài)變量,什么時(shí)候聲明為實(shí)例變量,方法什么時(shí)候聲明為實(shí)例方法,什么時(shí)候聲明為靜態(tài)方法,以及靜態(tài)方法中為何不能直接訪問實(shí)例變量和實(shí)例方法。
知識框架:
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");
}
}
以上程序的內(nèi)存結(jié)構(gòu)圖如下所示:
圖11-1:this內(nèi)存圖
this可以看做一個(gè)變量,它是一個(gè)引用,存儲在Java虛擬機(jī)堆內(nèi)存的對象內(nèi)部,this這個(gè)引用保存了當(dāng)前對象的內(nèi)存地址指向自身,任何一個(gè)堆內(nèi)存的java對象都有一個(gè)this,也就是說創(chuàng)建100個(gè)java對象則分別對應(yīng)100個(gè)this。通過以上的內(nèi)存圖,可以看出“jack引用”保存的內(nèi)存地址是0x1111,對應(yīng)的“this引用”保存的內(nèi)存地址也是0x1111,所以“jack引用”和“this引用”是可以劃等號的。也就是說訪問對象的時(shí)候jack.name和this.name是一樣的,都是訪問該引用所指向?qū)ο蟮膎ame屬性。
this指向“當(dāng)前對象”,也可以說this代表“當(dāng)前對象”,this可以使用在實(shí)例方法中以及構(gòu)造方法中,語法格式分別為“this.”和“this(..)”。this不能出現(xiàn)在帶有static的方法當(dāng)中。