一创建和销毁对象
来源:互联网 发布:中科院软件研究所待遇 编辑:程序博客网 时间: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
- 一创建和销毁对象
- 创建和销毁对象(一)
- EffectiveJava笔记(一) 创建和销毁对象
- 创建和销毁对象
- 创建和销毁对象
- 创建和销毁对象
- 创建和销毁对象
- 创建和销毁对象
- 创建和销毁对象
- 创建和销毁对象
- 创建和销毁对象
- 创建和销毁对象
- 创建和销毁对象
- 创建和销毁对象
- 创建和销毁对象
- 创建和销毁对象
- 创建和销毁对象
- 创建和销毁对象
- 快速幂及矩阵
- java 异常抛不抛出的影响
- 关于BSP,BIOS,和bootloader区别
- JAVA移位运算与进制转换
- 历届国际信息奥林匹克地址与结果
- 一创建和销毁对象
- Ajax 完整教程-(一)
- javascript 学习指南--语法
- RestEasy 调用Rest接口使用详解
- 机票项目总结
- 从 URL 输入到页面展现发生了什么?(What really happens when you navigate to a URL)
- Deserialize JSON / NSDictionary to Swift objects 将JSON 或Dic转为类对象
- 算法竞赛入门习题2-3倒三角
- Android第十九课;监听ListView列表项点击事件及滚动事件