使用静态工厂方法代替构造器,静态工厂方法通常比公有的构造器更加合适。

构造器的实现方法:
  1. 重叠构造器模式:不能很好的扩展到大量的可选参数,因为那时代码将难写和难读。
  2. JavaBean模式:使用一个无参构造器来创建对象,然后使用setter设置每个参数。缺点是可能不是线程安全的;阻止了把类做成不可变的可   能。
  3. Builder模式:编写一个公开静态内部类,然后编写一个私有的以builder为参数的构造方法,在Builder内部类里编写一个方法调用这个私有构造方法。Builder模式可用于具有多个参数时。

singleton:
  1. 编写一个公有的静态final成员。
  2. 编写一个私有的静态final成员,提供get方法。
  3. 只需编写一个包含单个元素的枚举类型。此方法是最佳的

通过私有化构造函数强化不可实例化的能力

避免创建不必要的对象:
  1. 可以把创建可重复使用对象的代码放到放到一个static{}里。
  2. 要优先使用基本类型而不是装箱基本类型。
  3. 通过维护对象池(object pool)来避免创建对象斌不是一种好的做法,除非池中的对象是非常重量级的,如数据库连接池。

消除过期的对象引用:
过期的对象引用来源如下:
  1. 存在永远也不会再被解除的引用。
  2. 把对象放在缓存里,然后忘记了。
  3. 监听器和其他回调。
解决方法是只保存它们的弱引用(weak reference),如把它们保存成WeakHashMap中的键。

避免使用终结方法:
终结方法的缺点在于不能保证会被及时的执行,而且根本就不保证它们会被执行。比如System.gc和System.runFinalization。
在Java里使用try-finally结构和显示的终止方法以保证及时终止,如close()方法和java.util.Timer的cancel方法。

effective Java chapter 2创建和销毁对象相关推荐

  1. Effective java 总结1 - 创建和销毁对象

    Effective java 总结 - 创建和销毁对象 第1条 用静态工厂方法代替构造器 优势 静态工厂方法有名称 不必每次调用的时候创建一个新的对象 可以返回原返回类型的任何子类型对象 返回对象的类 ...

  2. [Effective Java]第二章 创建和销毁对象

    第一章      前言 略... 第二章      创建和销毁对象 1.            考虑用静态工厂方法代替构造器 创建对象方法:一是最常用的公有构造器,二是静态工厂方法.下面是一个Bool ...

  3. Effective Java:创建和销毁对象

    前言: 读这本书第1条规则的时候就感觉到这是一本很好的书,可以把我们的Java功底提升一个档次,我还是比较推荐的.本博客是针对<Effective Java>这本书第2章所写的一篇读书笔记 ...

  4. Effective Java(1)-创建和销毁对象

    Effective Java(1)-创建和销毁对象 转载于:https://www.cnblogs.com/Johar/p/10556218.html

  5. 《Effective Java》学习笔记 第二章 创建和销毁对象

    第二章 创建和销毁对象 何时以及如何创建对象,何时以及如何避免创建对象,如何确保他们能够适时地销毁,以及如何管理对象销毁之前必须进行的各种清理动作. 1 考虑用静态工厂方法代替构造器 一般在某处获取一 ...

  6. Effective Java (3rd Editin) 读书笔记:1 创建和销毁对象

    1 创建和销毁对象 Item 1:考虑用静态工厂方法取代构造器 public static Boolean valueOf(boolean b) {return (b ? TRUE : FALSE); ...

  7. Effective Java读书笔记---二、创建和销毁对象

    二.创建和销毁对象 何时以及如何创建对象, 何时以及如何避免创建对象, 如何确保它们能够适时地销毁, 如何管理对象销毁之前必须进行的各种清理动作 1.用静态工厂方法代替构造器 优势: 它们有名称 不必 ...

  8. 《Effect Java》学习笔记1———创建和销毁对象

    第二章 创建和销毁对象 1.考虑用静态工厂方法代替构造器 四大优势: i. 有名称 ii. 不必在每次调用它们的时候都创建一个新的对象:   iii. 可以返回原返回类型的任何子类型的对象: JDBC ...

  9. java创建和销毁一个对象_有效的Java –创建和销毁对象

    java创建和销毁一个对象 创建和销毁对象(第2章) 这是Joshua Blochs的< 有效的Java>第2章的简短摘要.我仅包括与自己相关的项目. 静态工厂(项目1) 静态工厂与构造函 ...

  10. 有效的Java –创建和销毁对象

    创建和销毁对象(第2章) 这是Joshua Blochs的< 有效的Java>第2章的简短摘要.我仅包括与自己相关的项目. 静态工厂(项目1) 静态工厂与构造函数的一些优点: 工厂方法的名 ...

最新文章

  1. zoj 2709 Lottery 组合数,概率,贪心 (8-F)
  2. thinkphp的匹配php后缀,ThinkPHP的后缀操作方法配置 罢工了
  3. 网页设计制作必须知道的10个秘诀
  4. JZOJ 5401. 【NOIP2017提高A组模拟10.8】Star Way To Heaven
  5. html刮刮卡开始刮奖页面,html5刮刮卡抽奖 示例源码
  6. 浏览器屏蔽flash视频广告
  7. 【BZOJ2705】Longge的问题,数论练习
  8. Java基础学习总结(83)——Java泛型总结
  9. Netty in action—codec框架
  10. FxFactory pro 8 for Mac(视觉特效包处理工具)直装版
  11. 【传智播客】Javaweb程序设计任务教程 黑马程序员 第一章 课后答案
  12. Smali语法详解(2)
  13. Eigen教程3----矩阵、向量以及标量的运算,转置、共轭以及伴随矩阵
  14. 两台电脑实现串口通信
  15. Fluent中级工程进阶,从5种气体燃烧模型出发
  16. 字体反爬-汽车之家论坛
  17. 深度学习 -- SSD 算法流程详解
  18. Java,哈希码以及equals和==的区别(转载)
  19. 51单片机lcd1602实验(单片机的模拟电话拨号)
  20. 如何在Linux(Ubuntu 14.04 LTS)上安装搜狗拼音输入法

热门文章

  1. 读书笔记 effective c++ Item 26 尽量推迟变量的定义
  2. node.js Web实时消息后台服务器推送技术---GoEasy
  3. weblogic设置classpath、debug端口和log目录
  4. SSL证书配置注意事项
  5. 初步解决网同客户端升级后局域网不能上网的问题
  6. hdu 1213 “How Many Tables”(并查集基本到优化)
  7. vue生成静态html文件_是否可以将Vue.js模板编译为静态HTML和CSS文件?
  8. linux目录分配独立磁盘空间,Linux 分配/home的磁盘空间给根目录
  9. python列表元组字典集合实验心得_python心得 元组,字典,集合
  10. 牛客网-华为机试题(python)