java编程建议系列一

1.考虑用静态工厂方法代替构造器

静态工厂方法惯用名称

  • valueOf —— 类型转换方法

  • of —— valueOf的一种更简洁的替代

  • getInstance —— 该方法没有参数,并返回唯一的实例

  • newInstance —— 确保返回的每个实例都与其他实例不同

  • getType —— 与getInstance一样,但在工厂方法处于不同的类中使用,Type表示工厂方法所返回的对象类型

  • newType —— 与newInstance一样,但在工厂方法处于不同的类中使用,Type表示工厂方法所返回的对象类型

  • 具体方法参考Boolean,EnumSet

2.遇到多个构造器参数时考虑用构建器

**代码实例 **


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.用私有构造器或枚举类型强化Singleton属性

代码实例


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

public enum  Elvis {
    INSTANCE;
}

4.通过私有构造器强化不可实例化的能力

参考Math,Array,Collections

代码实例


public class UnitityClass {
    // 避免调用构造函数实例化
    private UnitityClass() {
        throw new AssertionError();
    }
} 

5.避免创建不必要的对象

代码实例


String s = new String("stringtte"); // 不要这样做

String s = "stringtte";

6.消除过期的对象引用

一般而言,只要类是自己管理内存,程序员就应该警惕内存泄露问题。

代码实例


public Object pop() {
    if (size == 0) {
        throw new EmptyStackException();
    }
    Object result = elements[--size];
    elemtents[size] = null; //重点在这里
    return result;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,254评论 18 399
  • 文章作者:Tyan博客:noahsnail.com Chapter 2 Creating and Destroyi...
    SnailTyan阅读 3,846评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,095评论 19 139
  • Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参...
    圣骑士wind阅读 2,976评论 0 2
  • 整晚整晚的睡不好,小腿太痛苦了。伸直也不是,弯着也不行。明明很困了,就是睡不着,好不容易睡去了,感觉整个人都好累。...
    或_阅读 1,346评论 1 1

友情链接更多精彩内容