1. 程式人生 > >Java程式設計思想4讀後小記

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的一個用途是用來修飾類或者類的方法,禁止繼承和覆蓋。