相關讀書筆記列表
NO.27 返回零長度的數組而不是null
如果返回null,對於每次調用到該方法的時候都需要做null判斷,否則很容易拋出null 指標異常,推薦返回一個零長度的數組,在通常情況下,這樣的做法對效能幾乎沒有影響。
NO.28 為所有匯出的API元素編寫文檔注釋
需要增加註釋的地方:類、介面、建構函式、方法和域聲明,方法注釋的內容:
調用該方法的前提條件;
調用後的後續處理(如捕獲異常);
副作用(如方法啟動線程後帶來的安全性);
參數@param Describe;
返回@return Describe;
異常@throws if.....;
注意:注釋中可以適用<p><code><tt>等HTML標籤,但>,<等標籤需要轉義。
NO.29 講局部變數的範圍最小化
在第一次適用局部變數的地方聲明他;
要防止局部變數在“使用它的塊”之外聲明,這樣會防止局部變數被意外使用;
幾乎每一個局部變數的需要初始化,如果沒有足夠的資訊來對一個變數進行有意義的初始化,那就延遲這個聲明,直到可以初始化為止;
其他的方法如,把一個變數多的方法分成兩個,每次操作一個方法,減少變數之間的幹擾。
NO.30 瞭解和使用庫
不要從頭髮明輪子,如果你要做的事情是很常見的,就去查下有沒有這樣的實作類別,如果有,則使用它,這樣會降低你實現相應功能的投入和代碼的出錯率。
NO.31 如果要求精確的答案,請避免使用 float和 double
float和 double不適合表示貨幣,在平時的使用中應該避免;如果希望系統來處理十進位的小數點,可以使用 BigDocimal,如果不考慮小數的處理,數值範圍沒有超過 9位的則可以用 int來處理,如果不超過 18位的,則可以用 long來處理,超過 18位的就必須用 BigDecimal處理。
NO.32 如果其他類型更適合,則盡量避免使用字串
如果可以使用更加合適的資料類型,或者可以編寫更加恰當的資料類型(如 DO、 POJO、枚舉等),那麼應該避免使用字串來表示對象,若使用不當,字串比其他類型更加笨拙,缺乏靈活性。
NO.33 瞭解字串串連的效能
為串連 N個字串而重複得地使用“ +”串連,要消耗 N的平方層級的時間。為了獲得更高的效能,請使用 StringBuffer代替 String。
NO.34 通過介面引用對象
應該優先使用介面而不是類來引用對象,如果有合適的介面存在,那麼對參數的傳回值、變數和域的聲明都應該使用介面類型,如 Vector是 List介面的實現,在聲明時應該如下:
List subscribers = new Vector();<br />//而不是<br />Vector subscribers = new Vector();
例外的情況:
① 當沒有合適的介面存在,可以用類而不是介面來引用一個對象,如: String、 Integer;
② 當一個對象是基本類型的類,而不是介面時,應該用相關的基類引用這個對象,如: java.util.TimerTask;
③ 當一個類實現了一個介面,單它提供了介面中不存在的額外方法,如果程式依賴於這些額外的方法,那麼這樣的類應該只被用來引用它的執行個體,永遠不應該被用作參數類型。
NO.35 介面優先於映像機制(反射機制)
反射機制是 Java一項強大的功能,對於一些特定複雜的程式設計中非常必要(如現在很流行的 spring架構),但在並非必須使用反射機制時,盡量避免使用反射,原因如下:
① 它在編譯時間不會進行類型檢查;
② 實現代碼冗長乏味,不易閱讀;
③ 效能與一般的方法調用相比,要低下很多;
如果一個程式必須要與編譯時間未知的類一起工作,那麼最好是用反射執行個體化對象,而訪問對象時使用編譯時間刻已知的某個介面或者父類。
NO.36 謹慎地使用本地方法
盡量使用 Java自身提供的方法來代替本地方法(如用 Java提供的新功能來代替以前只有 C語言能實現個的功能),這樣可以使系統變得更加安全,系統可移植性更高,也使代碼變得更加容易閱讀,如果一定要使用本地方法,請加強測試,並儘可能的少用。
NO.37 謹慎地進行最佳化
努力寫好的程式而不是快的程式,程式要體現資訊隱藏的原則,,效能問題應該是設計階段就考慮,要避免那些限制效能的設計決定,如:應該用複合模式的公有類使用繼承,則該類的效能永久的受其父類效能的影響,為了獲得好的效能而對 API進行修改並非是一個好的做法,通常,這些做法對效能並沒什麼多大的影響,如果一個系統有了清晰、簡明、結構良好的實現,請謹慎對其進行最佳化,因為 80%的效能問題存在於 20%的代碼中,找出影響效能的代碼才是問題的關鍵,可以藉助一些效能分析的工具。