Effective Java Item9 傾向使用try-with-resources勝過於try-finally

整理Effective Java書中Item 9: Prefer try-with-resources to try-finally心得筆記

主旨

蠻多lib提供使用資源後必須手動呼叫close關閉資源,符合開閉原則(OCP),但往往就有人沒有好好遵守,最後造成記憶體洩漏問題。

Read more

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