Java程式設計思想4讀後小記
3.4
本節講到Java的賦值的內容,需要區別的是基本型別(int,bool)的賦值和物件的賦值不太一樣。物件之間的賦值,實際是將"引用"從一個地方複製到另一個地方。這意味著如果對物件使用c=d,那麼c和d都指向原本只有d指向的那個物件,這個時候對c或者對d物件做更改,c和d都會改變。這種現象稱為Java的“別名現象”
3.7
本節講到關係操作符時,又一次體現了物件引用的的知識,當兩個物件進行“==”操作符進行比較的時候,其實比較的是這兩個物件的引用地址,而不是內容。
請看書本上面帶的例子
public class Equivalence{
public static void main(Sting[] args){
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1 == n2);
System.out.println(n1 != n2);
}
}
/*Output:
false
true
*////
所以物件的比較實用equals()。自定義類就要覆蓋equals方法來實現比較了。
6.3
類裡面介面的順序可能會採用public,protected,private的次序來建立,這樣便於使用者從頭讀起,首先閱讀對他們最重要的部分
6.4
類既不可以是private的,也不可以是protected的,如果希望增加訪問許可權,可以把構造器都指定成private,從而阻止任何人建立該類的物件,但是有一個類外,就是你在該類的static成員內部可以建立
class Soup2{
private Soup2(){}
private static Soup2 ps1 = new Soup2();
plublic static Soup2 access(){
return ps1;
}
}
這種方式也是傳說中的單例設計
7.3
Java的程式碼複用只要方式是組合和繼承,代理也是一種方式。代理其實就是用一個類對另一個類進行了封裝,提供介面給外部呼叫。
7.4.2
Java的基類如果擁有一個多次被過載的方法,那麼在這個基類的子類中該方法不會被遮蔽,這點和c++的繼承不一樣
@Override註解的作用,當你過載了原本是需要覆寫的基類方法時,編譯器會報錯
7.8.3
final的一個用途是用來修飾類或者類的方法,禁止繼承和覆蓋。