構(gòu)造器參數(shù)太多
- 需要解決成員變量太多碟刺,使用多個構(gòu)造方法不直觀的問題
- 直接使用get set無法限制bean中那些數(shù)據(jù)是必要的
- 解決方法:
Builder
模式
- 內(nèi)部使用一個子類作為構(gòu)造器
- 構(gòu)造器的get set返回本身,這樣可以鏈?zhǔn)秸{(diào)用
- 最終的構(gòu)造方法里檢測必要的字段是否有值
不需要實例化的對象建丧,構(gòu)造器私有
-
xxxUtil
xxTools
內(nèi)部都是static
方法腿堤,不需要實例化
- 防止使用者實例該對象
不要創(chuàng)建多余對象
Long sum = 0L;
for(long i = 0; i<xx; i++) {
sum = sum + i; // sum是包裝類型阀坏,i是基本類型,所以這里會先自動裝箱成對象
}
避免使用終結(jié)方法
- finaliza()方法虛擬機(jī)不保證此方法會被按時執(zhí)行或是執(zhí)行
- 釋放資源必須顯式釋放笆檀,不能依賴此方法
類和成員變量可訪問性最小化
- 主要作用是為了解耦
- 只向外暴露接口忌堂,實體間調(diào)用只依賴與接口,具體實現(xiàn)解耦
可變性最小化
- 類盡量做成不可變類
- 類不可變就線程安全了
- 類成員變量私有误债,不提供成員變量設(shè)置浸船,返回對象時返回復(fù)制的值等
優(yōu)先使用復(fù)合,而不是繼承
- 使用父類的方法會破壞父類的包裝性
- 例如父類實現(xiàn)類內(nèi)部相互調(diào)用寝蹈,重寫一個方法都可能影響其他方法
- 復(fù)合就是內(nèi)部包含一個類李命,使用這個類完成具體方法
接口優(yōu)于抽象類
- 一般來說,接口只能定義類將會有的行為箫老,抽象類里可以具體實現(xiàn)
- 接口更為純粹封字,不依賴于具體實現(xiàn),而抽象類可以有實現(xiàn)耍鬓。并且支持多實現(xiàn)
- 可以先定義一個接口阔籽,再聲明一個抽象類,實現(xiàn)類繼承這兩個(jdk的set等都是這么實現(xiàn)的)
可變參數(shù)的使用
int sum(int a, int... args)
返回零長度的數(shù)組和集合牲蜀,而不是null
優(yōu)先使用標(biāo)準(zhǔn)異常
- 代碼重用笆制,使用jdk已經(jīng)提供的
-
IlegalAraumentException
參數(shù)異常
使用枚舉而不 是常量
- 還可以枚舉內(nèi)使用另一個內(nèi)部枚舉當(dāng)作構(gòu)造方法參數(shù),以使枚舉有不同的性質(zhì)
- 即策略枚舉
局部變量作用域最小化
- 即不要一開始就聲明局部變量涣达,要到使用的時候再使用
- 防止不應(yīng)該使用局部變量的地方能夠修改局部變量
精確計算不適用float和double
當(dāng)心字符串連接的性能
控制方法的大小
常用性能指標(biāo)
- 并發(fā)數(shù)約等于在線人數(shù)的5%-15%
- 吞吐量 每分鐘证薇、沒秒鐘處理數(shù)量
- 一般平均響應(yīng)時間短,吞吐量就大箩张,反之小。但是吞吐量大熟掂,響應(yīng)時間未必短
常見性能優(yōu)化
- 避免過早優(yōu)化
- 性能測試,定位性能瓶頸
- 分而治之二蓝,逐步優(yōu)化