java创建和销毁一个对象_有效的Java –创建和销毁对象
java創建和銷毀一個對象
創建和銷毀對象(第2章)
這是Joshua Blochs的《 有效的Java》第2章的簡短摘要。我僅包括與自己相關的項目。
靜態工廠(項目1)
靜態工廠與構造函數的一些優點:
- 工廠方法的名稱為構造函數添加了描述
- 他們可以返回預先構造的對象,而不必總是返回new。
- 他們可以返回聲明的返回類型的任何子類型,甚至是非公共類。
僅使用靜態工廠(例如,使用私有構造函數)的主要缺點是無法對該類進行子類化。
用構造器代替具有許多參數的構造器(項目2)
調用具有許多參數的構造函數可能很麻煩,因為它需要查看方法聲明以了解參數表示什么。 這使得讀取和調用這樣的構造函數都很困難。
一種替代方法是使用無參數構造函數構造一個對象,然后使用setter設置所需的字段(JavaBean模式)。 這種方法的缺點是,在設置不變式時,對象可能處于不一致狀態。 此外,由于您提供的是setter,因此對象是不可變的,因此線程安全性很困難。
建筑商是第二種選擇,兩全其美。 生成器首先以可讀和緊湊的方式“收集”參數,然后通過首先驗證不變量是正確的來實例化對象。
由于建造者對于小班制可能會顯得過大,因此本書建議將其用于具有四個以上參數的班級。 請注意,對于構造函數和靜態工廠,構造器都是替代方法。
與Singelton的一些陷阱(項目3)
- 如果singelton未實現接口,則Singeltons使其難以測試其客戶端,因為您無法模擬出singelton。
- 如果將singeltons設置為可序列化的 ,則它們不再是singeltons,除非在反序列化時特別注意。
- 實現單例的最佳方法是使用單元素枚舉類型,這避免了序列化的問題。
避免創建不必要的對象(項目5)
創建對象時應小心。 重復使用昂貴的物品,但不要以防御性復制為代價(出于不變性–項目39)。 應優先于盒裝基元使用基元,并且在執行自動裝箱以刪除不必要的對象創建時要格外小心。
消除過時的對象引用(項目6)
這些書顯示了一個堆棧示例,其中彈出項目不會從內部數組中清空,從而使它們成為無法被垃圾回收的過時引用。 內存泄漏和過時引用的公共來源:
- 每當類管理自己的內存時 ,程序員都應該對內存泄漏發出警報。
- 忘記緩存條目。 考慮將WeakHashMap用于緩存,該緩存僅在條目的外部引用時才保存項目。
- 缺少注銷的監聽器和回調 。 同樣在這里可以使用WeakHashMap 。
翻譯自: https://www.javacodegeeks.com/2017/05/effective-java-creating-destroying-objects.html
java創建和銷毀一個對象
總結
以上是生活随笔為你收集整理的java创建和销毁一个对象_有效的Java –创建和销毁对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑共享可以不启用guest(电脑高级共
- 下一篇: 谈婚论嫁的整套流程(从恋爱到结婚的全过程