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