1. 程式人生 > >《Java程式碼與架構之完美優化-實戰經典》筆記

《Java程式碼與架構之完美優化-實戰經典》筆記

1.避免在一條語句中宣告或賦值多個變數,一行語句只宣告一個變數,避免int a,b;的情況
2.避免賦予臨時變數過多的角色,一個變數只有一種實際意義,即單一職責。
3.避免使用魔法數字,程式裡避免出現大量直接數字(預設0和1是非魔法數字),魔法數字需要用變數宣告用途,避免直接使用數字。
4.使用bigdecimal進行精確計算,有些時候在計算浮點數時需要精確計算,這是就可以使用BigDecimal
5.要習慣於用泛型代替原生型別(原生型別降低了程式的可讀性,同時推遲了潛在bug的被發現時間一無所知
在Java中,泛型是在編譯器中實現的而不是在虛擬機器中實現的,虛擬機器對泛型。因此編譯器一定要把泛型型別修改成普通類,才能夠在虛擬機器中執行,在Java中,這種技術叫做擦除,也就是用Object型別替換泛型)。使用泛型可以提高潛在的效能收益,具體如何使用網上有很多相關文章。
6.通過把引數提升為類成員變數來優化過長引數,如果一個函式引數列表過長,可以考慮將引數提升為類成員變數。
7.不要重寫靜態方法,重寫靜態方法意義不大,最終執行的還是父類的靜態方法,參考類初始化過程

類初始化優先順序關係
優先順序一:父類>子類
優先順序二:靜態變數>成員變數>構造器
物件初始化詳細過程:分配記憶體空間-預設初始化值-初始化值-塊初始化值
8.避免僅使用clone方法對物件進行復制(淺拷貝),淺拷貝的實質是直接記憶體棧區的複製,除非必要,不要克隆物件,即使克隆也要儘可能使用深度克隆方法。使用深度克隆當被克隆物件修改時克隆後的值並不會發生改變。
9.避免深度耦合的類關係
深度耦合有很多表現形式,以下是成員變數或方法之間的關係是典型的兩種現象:
1.在不具有父子關係的類中,A類經常使用B類的某個成員變數或方法
2.在具有父子關係的類中,兩個子類具有相同的成員變數或方法,父類裡某一個成員變數或方法只在其中一個子類裡面使用
10.設計短小精悍、職責明確的類,避免臃腫,以下有三種類瘦身方法
1.如果有很多成員變數賦值操作,可以使用BeanUtilss的成員變數賦值方法
2.如果業務邏輯多,可以把一些相關操作放到一個suport類中
3.如果成員變數過多,可以嘗試分解類,提煉出DTO(Data Transfer Object,資料傳輸物件,如資料庫表結構bean類),或者DVO(Data Value Object,資料價值物件,如form)資料物件類