1. 程式人生 > >Head first Java 讀書筆記

Head first Java 讀書筆記

1.引數與方法

1.實參(argument),形參(parameter),封裝(encapsulation)

2.對方法傳入引數,實際上傳入的是實參的拷貝。(按值傳遞 pass by value)

3.如果需要返回不同型別的值,需要使用ArrayList。

4.傳入與傳出方法的值型別可以隱含地放大或是明確的縮小。例如long-->short,需要強制轉換,long型別左方的位元組會被去掉。而將short-->long,會在short左方補零自動轉換。

5.封裝的基本原則:將例項變數標記為私有(private)的,並提供公用(public)的getter與setter方法。

6.例項變數不被初始化也會有預設值,而區域性變數沒有不被初始化沒有預設值,區域性變數在初始化之前使用會被編譯器報錯。

7.判斷兩個基本資料型別是否相等可以使用"==",而判斷兩個物件是否相等就需要使用equals()方法。

2.編寫程式

編寫程式的順序:

(1)找出類應該做的事情。(2)列出例項變數和方法。(3)編寫方法的偽碼。(4)編寫方法的測試程式。(5)實現類。

(6)測試方法。(7)出錯或者重新設計。

3.認識Java的API

1.類會用包來組織。

2.類有完整的名稱,那是由包的名稱與類的名稱所組成的。例如ArrayList事實上就叫做java.util.ArrayList。java.util是包名稱,Array是類的名稱。

3.除了java.lang以外,其他所使用的包均需要用import來匯入。

4.繼承與多型

1.子類會自動獲得父類的功能,覆蓋(override)的意思是由子類重新定義繼承下來的方法以改變或延伸此方法的行為。

2.如何設計繼承:

(1)找出具有共同屬性和行為的物件。

(2)設計代表共同狀態與行為的類。

(3)決定子類是否需要讓某項行為有特定不同的運作方式。

(4)通過尋找使用共同行為的子類來找出更多抽象化的機會。

(5)完成類的繼承層次。

3.當在呼叫物件引進的方法時,會呼叫到與該物件型別最接近的方法,也就是層次樹上最下方的方法。

4.編譯器會保證引用特定的方法是一定能夠被呼叫到的,但是方法定義在哪裡對編譯器來說並不重要。在執行期,Java虛擬機器能保證找到最接近該型別的版本。

5.如果在子類中打算引用父類的方法,可以用super關鍵詞來取用父類方法。

6.子類會繼承父類所有的public型別的例項變數和方法,但不會繼承父類所有的private型別的變數和方法。

7.繼承下來的方法可以被覆蓋掉,但是例項變數不能被覆蓋。

8.使用IS-A測試來驗證繼承結構的合理性。IS-A關係是單方向的,河馬是動物,但動物不一定是河馬。如果類Y是extends類X,且類Y是類Z的父類,則Z應該能通過IS-A X的測試。

9.如果想要防止特定的方法被覆蓋,可以將該方法標識上final修飾符,將整個類標識成final表示沒有任何的方法可以被覆蓋。

10.如果想要在子類中覆蓋(override)父類的方法,需要遵循兩條規則:

(1)輸入的引數必須一樣,且返回的型別必須要相容(一樣的型別或該型別的子類)。子類物件要保證能夠執行父類的一切。

(2)不能降低方法讀取的許可權。這會讓在編譯時通過而在JVM執行時被阻止存取。

11.方法過載(overload)是兩個方法的名稱相同,但是引數不同。過載可以使同一個方法有不同個引數版本以方便呼叫。過載與繼承或多型無關。

12.過載需要遵循三條規則:

(1)返回型別可以不同。

(2)不能只改變返回型別。不允許出現返回型別不同,但是輸入引數相同的情況。

(3)可更改儲存許可權。