effect java 學習摘要(1) - 創建和銷燬對象

靜態工廠方法替代構造器

  • 內容

    • 優點 :
      1. 返回的對象, 客戶端生成對象的代碼更容易被閱讀. 常用構造器的參數本身沒有確切地描述正被返回的對象.
      2. 不必在每次調用的時候都創建一個新的對象. 如果程序經常請求創建相同的對象 , 那這種方式極易提升性能.
      3. 返回原返回類型的任何子類型的對象.
      4. 創建參數類型實例的時候,使代碼變得更加簡潔.

    • 缺點 :

      1. 類如果不含共有的或者受保護的構造器, 就不能被子類化.
      2. 與其他靜態方法實際沒有任何區別
    • 靜態工廠方法 :

      1. java中常見的靜態工廠方法命名 :
        valueOf()
        of()
        newInstance()
        getType()
        newType()
        getInstance()
      2. 常見的靜態工廠方法實現由Sington單例模式;

多個構造器參數時要考慮用構建器

  • 場景 : 初始化對象實例具有多個構建參數.
  • AnTipattern(反模式) : 避免JavaBean模式構建, 除非保證線程安全, 否則多線程訪問會有大問題.
  • 解決方案 : 使用Builder模式來構建多參的對象

私有構造器或者枚舉類型強化Singleton屬性

  • 最佳單例模式的實現 : 枚舉Enum單例模式
    單例模式更多瞭解,請直接看這篇博客;

通過私有構造器強化不可實例化的能力

  • 類的靜態方法調用, 無需實例化構造器

避免創建不必要的對象

  • 可重用的變量, 可以設置爲靜態變量, 並且通過靜態代碼塊來初始化, 達到避免重複創建對象的目的.

    private static final Persion PERSION;
    
    static{
        //initialize PERSION
        PERSION = new Persion();
    }

消除過期對象引用

  • 作用 : 消除內存泄漏

  • 方法 :

    1. 清空過期引用, 常用方式 object = null;
    2. 內存泄漏來源於緩存 , 建議 WeakReference包裹之;
    3. callback以及監聽持有的匿名類, 建議也用WeakRefence包裹, 但還是需根據實際場景處理.

finalize()函數的使用

  • 使用try{}finally{}代碼塊 , 釋放資源, 例如cursor,bitmap等等
  • finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的。
  • Java中所有類都從Object類中繼承finalize()方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章