《Effective Java》讀書筆記(一)

開題

最近看了別人代碼越發(fā)發(fā)現(xiàn)代碼風(fēng)格、健壯性的重要性。往往在一些習(xí)慣中就能消除一些潛在的Bug和對(duì)效率的提高。因此對(duì)《Effective Java》整理一波比較重要的地方,在規(guī)范下自己代碼習(xí)慣。

第二章 創(chuàng)建和銷毀對(duì)象

1.靜態(tài)工廠代替構(gòu)造器

好處:有名稱、可以實(shí)現(xiàn)單例、可以返回子類型、隱藏部分參數(shù)使代碼簡(jiǎn)潔(ThreadPoolExecutor)
應(yīng)用:服務(wù)提供者框架(服務(wù)注冊(cè)接口、服務(wù)實(shí)現(xiàn)接口、服務(wù)調(diào)用接口),JDBC就是其應(yīng)用
缺點(diǎn):在繼承過程中可能丟失、在文檔中與其他靜態(tài)方法不容易區(qū)分
常用命名:valueOf/getInstance/newInstance/getType/newType

2.多構(gòu)造參數(shù)時(shí),用Builder模式

     例子:Test t = new Test().width(1).height(2).build();
      build()中方法進(jìn)行參數(shù)檢查
      應(yīng)用:ES建索引API有用到

3. 枚舉實(shí)現(xiàn)單例

4.只有靜態(tài)方法的工具類,要讓構(gòu)造器私有拒絕實(shí)例化

5.避免不必要對(duì)象

      重用不被修改的對(duì)象、優(yōu)先使用基本類型而不是自動(dòng)裝箱、非重量級(jí)對(duì)象(如Connection)就不要用線程池

6.消除過期引用

      數(shù)組拋棄list[i--]前記得置為null、弱引用WeakHashMap要常用、緩存LRU定期清楚多余數(shù)據(jù)

7.避免用finalize方法, 因?yàn)椴恢朗裁磿r(shí)候執(zhí)行

    自己寫終結(jié)方法(如close方法),并與try-finally聯(lián)用

第三章 所有對(duì)象通用方法

1.覆蓋equals,注意自反性、對(duì)稱性、傳遞性、一致性

對(duì)于子類提供 視圖 來暴露父類來進(jìn)行與父類對(duì)比
 //經(jīng)典覆蓋代碼:
          public boolean equals(Object obj){
                  if(obj == this)
                        return true;
                  if( !( o instanceof PhoneNumber ) )
                       return false;
                  PhoneNumber p = (PhoneNumber)obj;
                  return p.a == this.a && p.b == this.b;
          }

2.覆蓋equals時(shí)注意覆蓋hashCode

 原因:保證集合正常使用
 equals方法相等,則hashCode一定相等
 生成算法:對(duì)每個(gè)變量分別生成散列碼c,再依次調(diào)用
  result = 31*result+c
 一定用奇數(shù)避免信息丟失,31好處是可以用位移和減法( (i<<5)-i )來提高計(jì)算效率
 大對(duì)象可以緩存hash,提高性能

3.始終覆蓋toStrinig,提高程序可讀性

4.盡量別覆蓋clone,自己寫拷貝構(gòu)造器或者拷貝工廠

非要調(diào)用clone方法,務(wù)必在其中調(diào)用super.clone();

5.考慮實(shí)現(xiàn)Comparable接口中compareTo方法,有利于使用排序等功能

a.compaerTo(b),若a>b則返回大于0的值

第四章類和接口

1.類和成員可訪問性最小

默認(rèn)是包私有、成為public就要一直對(duì)他負(fù)責(zé)
子類訪問級(jí)別不可能小于父類

2. 所有成員變量不要公有域,而是用公有方法來代替

3. 可變性最小化,例如String、BIgInteger,因?yàn)榫€程是安全的

實(shí)現(xiàn)策略為:類final,所有域final
若"a"+"b"+"c"..這種產(chǎn)生較多對(duì)象,可以用類似StringBuffer來提高性能

4.復(fù)合優(yōu)于繼承(包括接口),避免了覆蓋問題

除了復(fù)合,還有一個(gè)策略就是使用轉(zhuǎn)發(fā)類,即包裝模式,避免覆蓋繼承類的會(huì)帶來問題

5.要么為繼承而設(shè)計(jì),提供文檔說明,要么就禁止繼承

6.接口優(yōu)于抽象類

接口可以構(gòu)建混合、非層次的類型框架
抽象類優(yōu)點(diǎn):增加方法,不用影響所有實(shí)現(xiàn)類修改
結(jié)合接口和抽象類優(yōu)點(diǎn),來實(shí)現(xiàn)一些基礎(chǔ)類的骨架

7.不要用接口來存放static final的常量值,而是用類

8.類層次優(yōu)于標(biāo)簽類,方便擴(kuò)展

9.類似Comparator這種策略類,用無域、單例、接口化實(shí)現(xiàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第2章 創(chuàng)建和銷毀對(duì)象 第1條:考慮用靜態(tài)工廠方法代替構(gòu)造方法 靜態(tài)工廠方法與構(gòu)造方法的不同 優(yōu)點(diǎn): 靜態(tài)工廠方法...
    QM閱讀 671評(píng)論 0 51
  • 對(duì)象的創(chuàng)建與銷毀 Item 1: 使用static工廠方法,而不是構(gòu)造函數(shù)創(chuàng)建對(duì)象:僅僅是創(chuàng)建對(duì)象的方法,并非Fa...
    孫小磊閱讀 2,182評(píng)論 0 3
  • 經(jīng)典重讀——亞馬遜鏈接 筆記鏈接 導(dǎo)圖: 筆記文本: Effective Java1 第2章 創(chuàng)建和銷毀對(duì)象1.1...
    8c3c932b5ffd閱讀 1,526評(píng)論 0 1
  • 第二章:創(chuàng)建和銷毀對(duì)象 第7條:避免使用終結(jié)方法 final、finally、finalize的區(qū)別: 第三章對(duì)所...
    48892085f47c閱讀 524評(píng)論 0 2
  • 今天,突然意識(shí)到:脖子不疼了!而且不知不覺一個(gè)周都沒疼過??赡軐?duì)別人來說,沒有什么驚奇,但是對(duì)我來說,真的很激動(dòng)。...
    寵物天空閱讀 258評(píng)論 0 1

友情鏈接更多精彩內(nèi)容