2007年11月8日 星期四

Head First Java 讀後整理(6) - Life and Death of an Object

1、「heap」為 object 的生存空間;「stack」則是 method invoke 與 local variable 的生存空間

2、Instance Variable:宣告在 class 中而非 method 中,代表每個獨立 object 的 field,存活與所屬物件中 (heap)

3、Local Variable:與 method 的參數都是被宣告在 method 中,為暫時性的,且生命週期只限於 method 被放置於 stack 的期間 (stack)

4、當呼叫 method 時,此 method 會被包含至 stack frame 後再堆到 call stack 上

5、非 primitive 的變數只是保存對 object 的參考,因此只會放在 stack 上 (所參考的 object 永遠存於 heap 中)

6、不論是 instance or local variable,objecy 本身永遠都會存在於 heap 中

7、constructor 的名稱必須與 class 名稱相同,而且沒有 return type

8、compiler 僅有在完全沒有設定 constructor 的情況下,才會預設一個不帶 argument 的 constructor

9、若 class 有一個以上的 constructor,則 argument 一定要長的不一樣 => overload

10、constructor 的存取權限可以是 public、private(class 以外不能存取)、或是不指定

11、建構新 object 時,所有繼承下來的 constructor 都會執行 (越上層的越先執行)
class Animal {
public Animal() {
System.out.println("Making a Animal");
}
}
class Hippo extends Animal {
public Hippo() {
System.out.println("Making a Hippo");
}
}

public class test {
public static void main(String args[]) {
Hippo h = new Hippo();

//輸出結果:
//Making a Animal
//Making a Hippo
}
}

12、compiler 對每個 overload 版本的 constructor 加上「super()」,而且一定是沒有 argument 的版本

13、即使要手動加入 super(),也要擺在 constructor 的第一行,否則 compiler 會顯示錯誤訊息

14、object 的 superclass 必須先完備,subclass 的部分才能建構

15、若要在 constructor 中呼叫另一個 constructor,可呼叫 this()

16、this() 僅能用在 constructor 中,且必須放在第一行

17、每個 constructor 可以選擇呼叫 super() 或是 this(),但不能同時呼叫

18、只要 stack frame 還存於 stack 上,local variable 就算存活,亦即會存活到 method 執行完畢為止

19、當最後一個 reference 消失後,object 就變成可回收的,此時就會被 GC 從 heap 中移除

20、若想要使用已經設定為 null 的 reference 來呼叫特定方法,會產生 NullPointerException

沒有留言:

張貼留言