Java核心技術 卷1 基礎知識 部分筆記
類設計技巧
- 一定要保證資料私有,有時需要寫一個訪問器或者更改器方法,但是最好還是保持例項域的私有性。經驗告訴我們,資料的表示形式可能會改變,但是他們的使用方法卻不會經常發生改變。當資料保持私有時,他們的表現形式的變化不會對類的使用者產生影響,即使出現bug也易於檢測。
- 一定要對資料初始化,最好不要依賴於系統的預設值。
- 不要在類中使用過多的基本型別。就是說,用其他的類代替多個相關的基本型別的使用。這樣會使類更加易於理解且易於修改。例如用一個稱為
Address
的新的類替換一個Customer
類一下的例項域:
private String street;
private String city;
private String state;
private int zip;
- 不是所有的域都需要獨立的域訪問器和域更改器。
- 將職責過多的類進行分解(單一職責原則)
- 類名和方法名一定要體現他們的職責。
繼承設計的技巧
- 將公共操作和域放在超類。
- 不要使用受保護的域,不過,
protected
方法對於指示那些不提供一般用途而應在子類中重新定義的方法很有用。 - 使用繼承實現”is-a”關係。
- 除非所有繼承的方法都有意義,否則不要使用繼承。(少用繼承,多用組合,被繼承的無用方法時有害的)
- 在覆蓋方法時,不要改變預期的行為。(行為的多型,而不是變態。。。)
- 使用多型,而非型別資訊。
無論什麼時候,對於下面這種形式的程式碼
if(x is of type1) action1(x);
else if(x is of type2) action2(x);
都應該考慮使用多型性。if else
實際上是硬編碼,不具有擴充套件性,不符合面向開閉原則,使用多型性,可以利用動態繫結原則,在執行時獲取真正要執行的型別,易於擴充套件。
7. 不要過多的使用反射。
equals和hashCode方法
在Object
類中,equals()
方法用來判斷兩個物件是否具有相同的引用。然而對於多數類來說,這種判斷沒有什麼意義。我們應該重寫這個方法,比如通過身份證是否相同來判斷是否是同一個人等,相同則認為兩個物件是相等的。
雜湊碼(hash code
)是由物件匯出的一個整數值。雜湊碼是沒有規律的。兩個物件的hashCode
基本不會相同。由於hashCode
定義在Object
類中,因此每個物件都有一個預設的雜湊碼,其值為物件的儲存地址。如果要重寫hashCode
,那麼它應該是一個整型數值(也可以是負數),併合理地組合例項域的雜湊碼,以便以後能讓各個不同的物件產生的雜湊碼更加均勻。
如果重新定義equals
方法,就必須重新定義hashCode
方法,以便使用者可以將物件插入到雜湊表中。
或者
equals與hashCode
的定義必須一致:如果x.equals(y)
返回true
,那麼x.hashCode()
就必須與y.hashCode()
具有相同的值。例如,如果用定義的Employee.equals
比較僱員的ID,那麼hashCode()
方法就需要雜湊ID,而不是僱員的姓名或者儲存地址。
如果存在陣列型別的域,那麼可以使用靜態的Arrays.hashCode()
方法計算一個雜湊碼,這個雜湊碼由陣列元素的雜湊碼組成。
相關文章
- 《Java核心技術(卷1)》筆記:第8章 泛型程式設計Java筆記泛型程式設計
- 技術分享 | Kubernetes 學習筆記之基礎知識篇筆記
- 《Java核心技術(卷1)》筆記:第7章 異常、斷言和日誌Java筆記
- C++基礎知識學習筆記(1)C++筆記
- GO 學習筆記 《1. 基礎知識》Go筆記
- Python學習筆記—day1—基礎知識Python筆記
- 卷積神經網路—基礎知識(1)卷積神經網路
- Java核心技術筆記 繼承Java筆記繼承
- java核心技術閱讀筆記Java筆記
- vueX基礎知識點筆記Vue筆記
- 基礎知識學習筆記筆記
- sql基礎知識(筆記)(一)SQL筆記
- Java基礎知識總結-1Java
- 《Java核心技術 卷I》學習筆記10:使用預定義類Java筆記
- Java安全基礎之Java Web核心技術JavaWeb
- JavaScript部分基礎知識點JavaScript
- Java基礎知識_記憶體Java記憶體
- java核心技術卷1 第五章:繼承Java繼承
- java核心技術卷1學習思維導圖Java
- java核心技術筆記--執行緒Java筆記執行緒
- JAVA核心技術學習筆記--反射Java筆記反射
- RxJava 學習筆記 -- 基礎知識RxJava筆記
- Java核心技術學習筆記——進階——第六章 Java網路程式設計——6.1 網路基礎知識Java筆記程式設計
- Redis基礎知識(學習筆記8--Redis命令(1))Redis筆記
- Redis基礎知識(學習筆記15--持久化 (1))Redis筆記持久化
- 1、基礎知識
- java基礎知識Java
- 初識Java Java基礎知識Java
- java基礎語法知識小結(1)Java
- Redis基礎知識(學習筆記1--五種基礎資料結構)Redis筆記資料結構
- DDD基礎知識1
- Python基礎知識1Python
- PHP 基礎知識-1PHP
- DS #1 基礎知識
- 1.基礎知識
- 《Java核心技術 卷I》學習筆記2:資料型別、變數與常量Java筆記資料型別變數
- OpenStack關鍵技術系列: Libvirt基礎知識
- 走進JavaWeb技術世界1:JavaWeb的由來和基礎知識JavaWeb