Effective Java 讀書筆記


1. 創(chuàng)建和銷毀對(duì)象

? ## *1.考慮用靜態(tài)工廠方法代替構(gòu)造器*

? #### 優(yōu)勢(shì)

? ? 1.有名稱

? ? 2.靜態(tài)工廠方法不必每次調(diào)用它們的時(shí)候都創(chuàng)建一個(gè)新的對(duì)象

? ? 3.可以返回原返回類型的任何子類型的對(duì)象 ?

? ? 4.在創(chuàng)建參數(shù)化類型實(shí)例的時(shí)候,它們使代碼變得更加簡(jiǎn)潔归薛。

? #### 區(qū)分“靜態(tài)工廠方法”和“公有構(gòu)造器”辟拷,理解各自的長(zhǎng)處孵坚。

? ---

? ## *2.遇到多個(gè)構(gòu)造器參數(shù)時(shí)要考慮用構(gòu)建器*

? ? ```java

? ? ? ? public class NutritionFacts{

? ? ??private final int servingSize;

? ? ??private final int servings;

? ? ??private final int calories;

? ? ??private final int fat;

? ? ??private final int sodium;

? ? ??private final int carbohydrate;

? ? ??public static class Builder{

? ? ????private final int servingSize;

? ? ????private final int servings;

? ? ????private int calories = 0;

? ? ????private int fat = 0;

? ? ????private int carbohydrate = 0;

? ? ????private int sodium = 0;

? ? ????public Builder(int servingSize,int servings){

? ? ??????this.servingSize = servingSize;

? ? ??????this.servings = servings;

? ? ????}

? ? ????public Builder calories(int val){

? ? ??????calories = val;

? ? ??????return this;

? ? ????}

? ? ????public Builder fat(int val){

? ? ??????fat = val;

? ? ??????return this;

? ? ????}

? ? ????public Builder carbohydrate(int val){

? ? ??????carbohydrate = val;

? ? ??????return this;

? ? ????}

? ? ????public Builder sodium(int val){

? ? ??????sodium = val;

? ? ??????return this;

? ? ????}

? ? ????public NutritionFacts build(){

? ? ??????return new NutritionFacts(this);

? ? ????}


? ? ??}

? ? ??privcate NutritionFacts(Builder builder){

? ? ????servingSize = builder.servingSize;

? ? ????servings = builder.servings;

? ? ????calories = builder.calories;

? ? ????fat = builder.fat;

? ? ????sodium = builder.sodium;

? ? ????carbohydrate = builder.carbohydrate;

? ? ??}

? ? }

NutritionFacts cocaCola = new NutritionFacts.Builder(240,8).calories(100).sodium(35).carbohydrate(27).build();

? ? ```

總而言之:如果類的構(gòu)造器或靜態(tài)工廠具有多個(gè)參數(shù)贫导,設(shè)計(jì)這種類的時(shí)候易阳,Builder模式就是一個(gè)不錯(cuò)的選擇蔚舀。

3.用私有構(gòu)造器或者枚舉類型強(qiáng)化Singleton屬性

? 單元素的枚舉類型已經(jīng)成為實(shí)現(xiàn)Singleton的最佳方法饵沧。

4.通過私有構(gòu)造器強(qiáng)化不可實(shí)例化的能力


? ? public class UtilityClass {

? ? ? private UtilityClass(){

? ? ? ? throw new AssertionError(); // 拋出AssertionError可以避免內(nèi)部調(diào)用構(gòu)造器

? ? ? }

? ? }


*5.避免創(chuàng)建不必要的對(duì)象*


? String s = new String("aaa"); //不要這樣

? String s = "aaa"; //應(yīng)該這樣

? ```


? //不要這么做

? public class Person{

? ? private final Data birthData;

? ? public boolean isBabyBoomer(){

? ? ? Calendar gmtCal=Calendar.getInstance(TimeZone.getTimeZone("GMT"));

? ? ? gmtCal.set(1946, Calendar.JANUARY,1,0,0,0);

? ? ? return ...

? ? }

? class Person{

? ? private final Data birthDate;

? ? private static final Date BOOM_START;

? ? private static final Date BOOM_END;

? ? // 使用靜態(tài)代碼塊

? ? static{

? ? ? Calendar gmtCal=Calendar.getInstance(TimeZone.getTimeZone("GMT"));

? ? ? gmtCal.set(1946, Calendar.JANUARY,1,0,0,0);

? ? ? BOOM_START = gmtCal.getTime();

? ? ? BOOM_END = ...

? ? }

? ? //改進(jìn)后只需要?jiǎng)?chuàng)建一個(gè)實(shí)例

? ? public boolean isBabyBoomer(){

? ? ? return birthData.compareTo(BOOM_START) >= 0 && birthData.compareTo(BOOM_END) <0;

? ? }

? }?

}

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市赌躺,隨后出現(xiàn)的幾起案子狼牺,更是在濱河造成了極大的恐慌,老刑警劉巖礼患,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件是钥,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡缅叠,警方通過查閱死者的電腦和手機(jī)悄泥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肤粱,“玉大人弹囚,你說我怎么就攤上這事×炻” “怎么了鸥鹉?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)庶骄。 經(jīng)常有香客問我毁渗,道長(zhǎng),這世上最難降的妖魔是什么单刁? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任灸异,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绎狭。我一直安慰自己细溅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布儡嘶。 她就那樣靜靜地躺著喇聊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蹦狂。 梳的紋絲不亂的頭發(fā)上誓篱,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音凯楔,去河邊找鬼窜骄。 笑死,一個(gè)胖子當(dāng)著我的面吹牛摆屯,可吹牛的內(nèi)容都是我干的邻遏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼虐骑,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼准验!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起廷没,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤糊饱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后颠黎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體另锋,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年狭归,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了夭坪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡唉铜,死狀恐怖台舱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情潭流,我是刑警寧澤竞惋,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站灰嫉,受9級(jí)特大地震影響拆宛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜讼撒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一愉昆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧泽示,春花似錦、人聲如沸物蝙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诬乞。三九已至,卻和暖如春钠导,著一層夾襖步出監(jiān)牢的瞬間震嫉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工牡属, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留票堵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓逮栅,卻偏偏與公主長(zhǎng)得像悴势,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子措伐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容