Effective Java Item8 避免使用finalizers和cleaners

整理Effective Java書中Item 8: Avoid finalizers and cleaners心得筆記

主旨

開門見山提到finalizers是不可預測行為、危險的並且也是不並要的。不當使用可能會導致不穩定的行為、糟糕的效能以及其他問題。在Java9已經把finalizers換成cleaners了,雖然cleaners比finalizers危險性較小,但還是一樣有無法預測、效能差等問題,很多開發者看完這段還是不清楚書中到底要說什麼。繼續研究下去。

Read more

Effective Java Item7 移除不需要的物件引用

整理Effective Java書中Item 7: Eliminate obsolete object references心得筆記

主旨

由於Java有GC的機制,很多時候開發者不會考慮到記憶體管理或著覺得不需要考慮,這是錯誤的觀念,如果忽略可能導致潛在memory leak問題,必須重視。

Read more

Effective Java Item6 避免不必要的創建物件

整理Effective Java書中Item 6: Avoid creating unnecessary objects心得筆記

主旨

如果是不可變的物件(Immutable object),重複使用該物件可以讓效能以及資源控制更好,例如之前提到的靜態工廠方法Boolean.valueOf(String)

點出問題

  1. 底層封裝了處理方式

問題在於很多開發者不知道其實自己已經不自覺創了很多物件,尤其是java開發者在現在調用api便利的情況下,也沒有去探究底層原理,積少成多造成系統壓力。下面範例判斷字符串是否為有效的羅馬數字。

Read more

Effective Java Item5 使用依賴注入優於硬連結資源

整理Effective Java書中Item 5: Prefer dependency injection to hardwiring resources心得筆記

主旨

這篇在呼應item3提到的singleton以及item4中utils class的問題,建議使用依賴注入(dependency injection)。

點出問題

Static utility classes and singletons are inappropriate for classes whose behavior is parameterized by an underlying resource.

Static utility classes and singletons這兩種不適合使用參數取得底層資源,舉個白話一點的例子,今天需求是驗證信用卡卡號是否合法,你寫了一個utils class也遵照了item4提出的建議,很快地做完了。

Read more

Effective Java Item4 透過私有建構函式來禁止實例化

整理Effective Java書中Item 4: Enforce noninstantiability with a private constructor心得筆記

主旨

本篇在開門見山說了使用私有建構子來防止物件被實例化。

劃重點

主要概念很簡單,你在設計一個Utils class,

  1. 請將constructor設為private。
  2. 並在被實例化時(constructor被執行時)拋出錯誤。
Read more