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