2007年11月5日 星期一

Head First Java 讀後整理(1) - How Objects Behave

1、任一 class 的每個 instance 都帶有相同的 method,但 method 可根據 instance variable 的值來表現不同的行為
class song {
private String title;
private String artist;

public void setTitle(Atring title) {
this.title = title;
}

public void play() {
soundPlayer.playSound(title);
}

public static void main(String[] args) {
song s1 = new song();
s1.setTitle("first song");
s1.play(); //播放 first song

song s2 = new song();
s2.setTitle("second song");
s2.play(); //播放 second song
}
}
2、parameter 與 argument 的區別 => method 運用 parameter;而呼叫 method 的一方則傳入 argument

3、Java 是 pass-by-value,也就是 pass-by copy
不像 C 中的 pass-by-reference,在 method 中任意改變傳入變數的值,不會影響原本在外部的變數。

4、instance variable 的存取,請多用 setter 與 getter 的方式,亦即 Encapsulation(封裝)
如第一點中所附的程式碼,其中 title 與 artist 這兩個 instance variable 是無法被存取的,而必須透過 setTitle() 與 setArtist() 兩個 method 進行存取,雖然犧牲了點效能,但之後若是 instance variable 的方式有改變,可以不必更動透過 method 取值的其他程式。

5、instance variable 永遠都會有預設值,即使沒有指派值或是呼叫 setter,還是會有值
integer:0
floating points:0.0
booleans:false
references:null

6、local variable 沒有預設值,因此在變數初始化之前就使用,compiler 會顯示錯誤

7、使用「==」來比對 primitive,是比對其位元組合是否相同
int a = 3;
byte b = 3;
if(a == b) {....} //True

8、使用「==」來比對 reference,是比對是否參照到相同的 object
foo a = new foo();
foo b = new foo();
c = a;
if(a == b) {....} //False
if(a == c) {....} //True
if(b == c) {....} //False

沒有留言:

張貼留言