轉載請註明出處:http://blog.csdn.NET/supera_li/article/details/44940563
java
Effective Java系列
1.Effective java經驗之談,建立和銷燬對象
2.Effective java經驗之談,泛型
3.Effective java經驗之談,類與接口
4.Effective java經驗之談,通用方法
5.Effective java經驗之談,枚舉,註解,方法,通用設計,異常
6.Effective java經驗之談,併發編程
編程
本章描述的是,本身在作系統重構的時候,閱讀的章節,給本身在架構方面提供很大幫助。總結出一些乾貨分享一下啊啊啊~~主要應用場景是編寫類與接口的時候須要注意的問題。每一章不必定按照順序更新。歡迎拍磚補充。數組
1.類與成員的訪問權限最小化。Public staticfinal 若是指向的是對象(數組也是對象),那麼每每是錯誤的寫法,【private static final A=指向該對象,同時採用public static final指向A.clone()(A的副本)】【private staticfinal A=指向該對象,public static final List經過Collections.unmodifiableList(Arrays.asList(A))返回一個List列表,存放數組】架構
2.在公有類使用訪問方法而非開放數據域,即公有類不該該暴露可變域。例如javabean採用setter/getter方法來操做對象數據域併發
3.複合優於繼承,將繼承類當作一個組件放到複合類中,經過一系列轉發方法實現繼承類。而後經過外界函數調用此複合類。函數
4.要麼爲繼承而設計,並提供文檔說明,要麼就禁止繼承。禁止繼承,能夠經過final,以及構造器私有化完成。若是須要繼承,那麼須要考慮繼承類在任什麼時候候不能調用該類可覆蓋的方法,能夠機械消除可覆蓋方法的自用特性,經過將該覆蓋的方法代碼複製一份私有輔助方法。經過調用私有輔助方法消除自用特性。工具
5.接口優於抽象類,抽象類是爲繼承而設計的,抽象類演變比接口容易的多,例如,後期須要增長方法,抽象類能夠,但接口卻不行。性能
6.接口只用於定義類型,例如常量接口是對接口的不良使用。對於常量的設計,若是常量緊密關聯某一個類,將寫入該類內部。若是能看錯枚舉常量就用枚舉代替。不然將採用不可實例化的工具類來導出這些常量。網站
7.類層次優於標籤類。若是代碼中存在根據某一個標誌位而產生不一樣的方法結果,也就是代碼模板,那麼須要考慮是否能夠層次化代碼,將模板代碼提取爲抽象類中的方法進行類層次化。編碼
8.用函數對象表示策略,函數對象做爲參數傳遞到方法,表明着java中的「指針」,經過能夠將函數對象採用接口的形式來包裝成策略,提供一個 「宿主類」經過一個公有的靜態方法來調用私有的靜態成員,該靜態成員就是此策略的實現方式。
在系統架構編碼的時候優先能統一爲接口嗎?該類能使用複合嗎?該類是必定被繼承下去的,採用抽象類能夠嗎?其餘類能繼承嗎?該類編寫前,X屬性能public嗎?大體就這些通常性思考方向。