摘要:但由于模式本身有嚴重的缺陷,由于構(gòu)造方法在多次調(diào)用中被分割,導(dǎo)致可能處于不一致的狀態(tài),并且還需要額外增加工作以確保線程安全。方法必須遵從類指定的常規(guī)約定,將不同的哈希碼分配給不同的實例對象。
1.使用靜態(tài)工廠方法替代構(gòu)造方法
靜態(tài)工廠方法的優(yōu)點:
不像構(gòu)造方法,它是有名字的。
它不需要每次調(diào)用時都創(chuàng)建一個新對象。
它可以返回 其返回類型的任何子類型的對象。
返回對象的類可以根據(jù)輸入?yún)?shù)的不同而不同。
在編寫包含該方法的類時,返回的對象的類不需要存在。
當(dāng)一個對象中,屬性過多時,使用構(gòu)造方法時,參數(shù)過多導(dǎo)致難以維護,并且很難讀懂每個參數(shù)的含義是什么。
使用 構(gòu)造方法 來構(gòu)建必傳參數(shù),而用 setter 的方式來傳可選參數(shù)呢?這看似參數(shù)少,創(chuàng)建實例也很容易,并且所生成的代碼也易于閱讀。但由于 JavaBeans 模式本身有嚴重的缺陷,由于構(gòu)造方法在多次調(diào)用中被分割,導(dǎo)致 JavaBeans 可能處于不一致的狀態(tài),并且還需要額外增加工作以確保線程安全。
最好處理參數(shù)過多的方法是使用 builder 模式,它結(jié)合了可伸縮構(gòu)造方法模式的安全性和 JavaBeans 模式的可讀性,然后在調(diào)用 builder 對象的 setter 相似方法來設(shè)置每個可選參數(shù)。
3.使用依賴注入的方式注入資源依賴注入的實踐將極大地增強類的靈活性、可重用性和可測試性。
4.不要創(chuàng)建不必要的對象如果對象是不可變的,它總是可以被重用的,比如 String 類是 final 的,不可變的,最好不要用 new String("test"), 因為它每次都會創(chuàng)建一個新的對象。在性能有嚴格要求的情況下,優(yōu)先使用基本類型而不是裝箱的基本類型,也要注意無意識的自動裝箱,因為它們會影響性能。
5.消除過期的對象引用這個也就是常說的內(nèi)存泄露。當(dāng)一個類自己管理內(nèi)存時,應(yīng)該警惕內(nèi)存泄漏問題。 每當(dāng)一個元素被釋放時,元素中包含的任何對象引用都應(yīng)該被清除。
另一個常見的內(nèi)存泄漏來源是緩存。一旦將對象引用放入緩存中,很容易忘記它的存在,可以用 WeakHashMap 來表示緩存。
6.避免使用 Finalizer 和 Cleaner 機制,請使用 try-with-resources 語句用于 Finalizer 和 Cleaner 機制的不確定性,我們不知道它到底何時會執(zhí)行。例如,依賴于 Finalizer 和 Cleaner 機制來關(guān)閉文件是嚴重的錯誤,因為打開的文件描述符是有限的資源。 如果由于系統(tǒng)遲遲沒有運行 Finalizer 和 Cleaner 機制而導(dǎo)致許多文件被打開,程序可能會失敗,因為它不能再打開文件了??梢杂?try-with-resources 語句 或 try-finally 語句,當(dāng)打開多個文件時,try-finally 語句的可讀性就不如 try-with-resources 語句,因此推薦使用 try-with-resources 語句。
7.重寫 equals 方法時同時也要重寫 hashcode 方法重寫 equals 方法時,需要滿足以下特性。
自反性:一個對象必須與自身相等。
對稱性:任何非空引用 x 和 y,如果且僅當(dāng) y.equals(x) 返回 true 時 x.equals(y) 必須返回 true。
傳遞性:如果第一個對象等于第二個對象,第二個對象等于第三個對象,那么第一個對象必須等于第三個對象。
一致性:如果兩個對象是相等的,除非一個(或兩個)對象被修改了, 那么它們必須始終保持相等。
非空性:對于任何非空引用 x,x.equals(null) 必須返回 false。
每次重寫 equals 方法時都必須重寫 hashCode 方法,否則程序?qū)o法正常運行。 hashCode 方法必須遵從 Object 類指定的常規(guī)約定,將不同的哈希碼分配給不同的實例對象。
8.始終重寫 toString 方法Object 類提供了 toString 方法的實現(xiàn)是包名+類名+@+哈希碼的無符號十六進制。toString 的通用約定要求,返回的字符串應(yīng)該是“一個簡潔但內(nèi)容豐富的表示,對人們來說是很容易閱讀的”。就需要 toString 方法,方便可讀性。
9.考慮實現(xiàn) Comparable 接口在需要可比較的場景中,最好實現(xiàn) Comparable 接口,以便在基于比較的集合中輕松對其實例進行排序,搜索和使用。 比較 compareTo 方法的實現(xiàn)中的字段值時,請避免使用"<"和">"運算符。 最好使用包裝類中的靜態(tài) compare 方法或 Comparator 接口中的構(gòu)建方法。
10.使類和成員的可訪問性最小化一個優(yōu)秀設(shè)計的組件隱藏了它的所有實現(xiàn)細節(jié),干凈地將它的 API 與它的實現(xiàn)分離開來。然后,組件只通過它們的 API 進行通信,并且對彼此的內(nèi)部工作一無所知。稱為信息隱藏或封裝,是軟件設(shè)計的基本原則。
Java中的四種訪問級別:
private——只能自己訪問。
package-private——默認級別,同包中的任意類訪問。
protected——子類和自己可以訪問。
public —— 任何類都可訪問。
PS:
清山綠水始于塵,博學(xué)多識貴于勤。
我有酒,你有故事嗎?
微信公眾號:「清塵閑聊」。
歡迎一起談天說地,聊代碼。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/74152.html
摘要:通過請求和響應(yīng)的交換達成通信協(xié)議中已經(jīng)規(guī)定了請求是從客戶端發(fā)出,最后由服務(wù)端響應(yīng)這個請求并返回。隨后的字符串指明了請求訪問的資源對象。協(xié)議自身不對請求和響應(yīng)之間的通信狀態(tài)進行保存,也就是說這個級別。從前發(fā)送請求后需等待并受到響應(yīng)。 showImg(https://segmentfault.com/img/bVbmDsG?w=1024&h=538); http協(xié)議用戶客戶端和服務(wù)器之間的...
摘要:報文用于協(xié)議交互的信息被稱為報文?,F(xiàn)在出現(xiàn)的各種首部字段及狀態(tài)碼稍后會闡述。狀態(tài)碼響應(yīng)報文包含了多個范圍的內(nèi)容使用。如果服務(wù)器無法響應(yīng)范圍請求,則會返回狀態(tài)碼和完整的實體內(nèi)容。 showImg(https://segmentfault.com/img/bVbthNL?w=900&h=500); http報文 用于HTTP協(xié)議交互的信息被稱為HTTP報文。請求端的http報文叫做請求報文...
摘要:誕生了在深入學(xué)習(xí)之前我們來了解一下他的背景,同時了解一下當(dāng)時制定的初衷,這樣有助于我們更好的理解。為知識共享而規(guī)劃的在年月,互聯(lián)網(wǎng)還只屬于少數(shù)人,在互聯(lián)網(wǎng)的前期,誕生了。的成長時代年月,成功研發(fā)了世界上第一臺服務(wù)器和瀏覽器。 showImg(https://segmentfault.com/img/bVblTgr?w=800&h=400);在當(dāng)前大前端的環(huán)境下,前后端分離,前后端同構(gòu)等...
閱讀 926·2021-11-22 13:54
閱讀 2853·2021-09-28 09:36
閱讀 2993·2019-08-30 15:55
閱讀 1960·2019-08-30 15:44
閱讀 554·2019-08-29 12:31
閱讀 2570·2019-08-28 18:18
閱讀 1208·2019-08-26 13:58
閱讀 1395·2019-08-26 13:44