java編程建議系列一

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

靜態(tài)工廠方法慣用名稱

  • valueOf —— 類型轉(zhuǎn)換方法

  • of —— valueOf的一種更簡潔的替代

  • getInstance —— 該方法沒有參數(shù)荠瘪,并返回唯一的實例

  • newInstance —— 確保返回的每個實例都與其他實例不同

  • getType —— 與getInstance一樣,但在工廠方法處于不同的類中使用,Type表示工廠方法所返回的對象類型

  • newType —— 與newInstance一樣司致,但在工廠方法處于不同的類中使用,Type表示工廠方法所返回的對象類型

  • 具體方法參考Boolean胡野,EnumSet

2.遇到多個構(gòu)造器參數(shù)時考慮用構(gòu)建器

**代碼實例 **


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 int servingSize;
        private int servings;
        private int calories = 0;
        private int fat = 0;
        private int sodium = 0;
        private int carbohydrate = 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);
        }
    }

    public NutritionFacts(Builder builder) {
        servingSize = builder.servingSize;
        servings = builder.servings;
        calories = builder.calories;
        fat = builder.fat;
        sodium = builder.sodium;
        carbohydrate = builder.carbohydrate;
    }

    public int getServingSize() {
        return servingSize;
    }

    public int getServings() {
        return servings;
    }

    public int getCalories() {
        return calories;
    }

    public int getFat() {
        return fat;
    }

    public int getSodium() {
        return sodium;
    }

    public int getCarbohydrate() {
        return carbohydrate;
    }

    public static void main(String[] args) {
        NutritionFacts nutritionFacts = new Builder(1, 3).calories(2).carbohydrate(2).build();
        System.out.println(nutritionFacts.getCalories());
        System.out.println(nutritionFacts.getCarbohydrate());
        System.out.println(nutritionFacts.getFat());
        System.out.println(nutritionFacts.getServings());
    }
}

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

代碼實例


public class Elvis {
    private static final Elvis INSTANCE = new Elvis();
    private Elvis() {}
    private static Elvis getInstance() {
        return  INSTANCE;
    }
}

public enum  Elvis {
    INSTANCE;
}

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

參考Math目锭,Array港谊,Collections

代碼實例


public class UnitityClass {
    // 避免調(diào)用構(gòu)造函數(shù)實例化
    private UnitityClass() {
        throw new AssertionError();
    }
} 

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

代碼實例


String s = new String("stringtte"); // 不要這樣做

String s = "stringtte";

6.消除過期的對象引用

一般而言秃嗜,只要類是自己管理內(nèi)存储玫,程序員就應(yīng)該警惕內(nèi)存泄露問題。

代碼實例


public Object pop() {
    if (size == 0) {
        throw new EmptyStackException();
    }
    Object result = elements[--size];
    elemtents[size] = null; //重點在這里
    return result;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末驯镊,一起剝皮案震驚了整個濱河市葫督,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌板惑,老刑警劉巖橄镜,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異冯乘,居然都是意外死亡洽胶,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門裆馒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來姊氓,“玉大人,你說我怎么就攤上這事喷好∠韬幔” “怎么了?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵梗搅,是天一觀的道長禾唁。 經(jīng)常有香客問我,道長无切,這世上最難降的妖魔是什么荡短? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮哆键,結(jié)果婚禮上掘托,老公的妹妹穿的比我還像新娘。我一直安慰自己洼哎,他們只是感情好烫映,可當我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布沼本。 她就那樣靜靜地躺著噩峦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪抽兆。 梳的紋絲不亂的頭發(fā)上识补,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天,我揣著相機與錄音辫红,去河邊找鬼凭涂。 笑死祝辣,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的切油。 我是一名探鬼主播蝙斜,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼澎胡!你這毒婦竟也來了孕荠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤攻谁,失蹤者是張志新(化名)和其女友劉穎稚伍,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體戚宦,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡个曙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了受楼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垦搬。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖那槽,靈堂內(nèi)的尸體忽然破棺而出悼沿,到底是詐尸還是另有隱情,我是刑警寧澤骚灸,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布糟趾,位于F島的核電站,受9級特大地震影響甚牲,放射性物質(zhì)發(fā)生泄漏义郑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一丈钙、第九天 我趴在偏房一處隱蔽的房頂上張望非驮。 院中可真熱鬧,春花似錦雏赦、人聲如沸劫笙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽填大。三九已至,卻和暖如春俏橘,著一層夾襖步出監(jiān)牢的瞬間允华,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留靴寂,地道東北人磷蜀。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像百炬,于是被迫代替她去往敵國和親褐隆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,647評論 2 354

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法剖踊,類相關(guān)的語法妓灌,內(nèi)部類的語法,繼承相關(guān)的語法蜜宪,異常的語法虫埂,線程的語...
    子非魚_t_閱讀 31,623評論 18 399
  • 文章作者:Tyan博客:noahsnail.com Chapter 2 Creating and Destroyi...
    SnailTyan閱讀 644評論 0 1
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)圃验,斷路器掉伏,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • Effective Java筆記一 創(chuàng)建和銷毀對象 第1條 考慮用靜態(tài)工廠方法代替構(gòu)造器 第2條 遇到多個構(gòu)造器參...
    圣騎士wind閱讀 385評論 0 2
  • 整晚整晚的睡不好,小腿太痛苦了澳窑。伸直也不是斧散,彎著也不行。明明很困了摊聋,就是睡不著鸡捐,好不容易睡去了,感覺整個人都好累麻裁。...
    或_閱讀 165評論 1 1