一创建和销毁对象

来源:互联网 发布:中科院软件研究所待遇 编辑:程序博客网 时间:2024/04/29 23:11

创建和销毁对象

 一 静态工厂替代构造器

静态工厂方法优势

1>    静态工厂方法有具体的名称,调用更清晰

2>    只生成一次,避免重复生成对象

3>    返回原类型的子类型

二 遇到多个构造器参数时考虑使用构建器

1>    可选参数过多时,可以考虑重叠构造器

publicNutritionFacts(int servingSize, int servings) {           this(servingSize, servings, 0);} public NutritionFacts(int servingSize, intservings, int calories) {           this(servingSize, servings, calories,0);} public NutritionFacts(int servingSize, intservings, int calories, int fat) {           this(servingSize, servings, calories,fat, 0);} public NutritionFacts(int servingSize, intservings, int calories, int fat,                    int sodium) {           this(servingSize, servings, calories,fat, sodium, 0);} public NutritionFacts(int servingSize, intservings, int calories, int fat,                    int sodium, intcarbohydrate) {           this.servingSize = servingSize;           this.servings = servings;           this.calories = calories;           this.fat = fat;           this.sodium = sodium;           this.carbohydrate = carbohydrate;}


2>    重叠构造器的升级版本,Builder模式

publicclass 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 {           // Required parameters           private final int servingSize;           private final int servings;            // Optional parameters - initializedto default values           private int calories = 0;           private int fat = 0;           private int carbohydrate = 0;           private int sodium = 0;            public Builder(int servingSize, intservings) {                    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 newNutritionFacts(this);           }} private NutritionFacts(Builder builder) {           servingSize = builder.servingSize;           servings = builder.servings;           calories = builder.calories;           fat = builder.fat;           sodium = builder.sodium;           carbohydrate = builder.carbohydrate;} public static void main(String[] args) {           NutritionFacts cocaCola = newNutritionFacts.Builder(240, 8)                             .calories(100).sodium(35).carbohydrate(27).build();}}



3>    总结,参数少时,可以考虑静态工厂方法或者重叠构造器,当参数过多时,可以考虑Builder模式,具体视情况而定

三 私有构造器或者枚举强化Singleton属性

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

五 避免创建不必要的对象

 1Strings=new String(“xza”); 

  每次执行都会new一个string

改进后

 String s=”xzq”;

2 重复调用的对象,可以使用静态块生成,提高访问效率

3 基本类型要装箱类型效率高,优先使用基本类型

六 消除过期的对象引用

 1 一旦元素被释放掉,该元素包含的任何引用对象都应该被清空

2 类自己管理内存,就应该考虑内存泄露问题

3 缓存应该及时清理掉没用的项

七 避免使用终结方法

1 避免使用finalize,finalize通常不可预测,有风险

2 需要关闭的资源可以使用try  catch  finally 

 

 

许久没有看Java基础知识了,趁着过年公司不忙,把Java基础重新回顾回顾

0 0
原创粉丝点击