本章節目標:
理解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的方法當中。