第一条、静态工厂替代构造器

  1.更高的可读性,可命名。

  2.可以控制对象的数量,统一入口生成,单例、对象重用

  3.获取对象更加灵活,可以返回对象的所有子类

    通过静态类暴露API,可以隐藏API实现类,使API更加的简洁(Collections)

    服务提供者框架,通过服务访问API获取服务对象,配合提供者注册API可以灵活替换不同的实现,从而实现了用户以及服务访问API和具体实现的解耦。

  4.参数化使代码更加简洁,新版jdk已经实现了类型推导

第二条、遇到多个构造器参数时要考虑使用构造器

  1.重叠构造器,调用多参构造器初始化虽然代码简洁但不易懂,没有可读性,而且当参数数量增加时,构造器难以维护,调用处也容易出错,需要自己核对参数顺序以及数量。

  2.Javabeans模式,解决了可读性问题但是对象初始化被拆分,没有原子性,无法满足多线程情况。

  3.Builder模式,通过增加builder对象添加调用参数解决了可读性问题,再通过builder内部调用目标对象构造方法实例化对象保证了原子性

  tip:可以在builder中做参数校验,public interface Builder<T>{public T builder();}了解一下

第三条、用私有构造器或者美剧强化Singleton属性

  1.工厂方法实现单例的好处在于提供了灵活性,可以控制对象的返回,控制对象是唯一。

  2.序列化,单例模式在这里有个坑,反序列化的时候默认会new 一个对象,破坏单例,可以增加private Object ReadResolve(return INSTANCE;)避免这种情况,java在序列化时会检查对象中是否实现这个方法,如果有,则会在序列化时做特殊处理,并在反序列化时通过调用该方法获取对象,从而保证对象唯一。

  tip:通过单元素枚举可以实现一个相对完美的单例

第四条、不需要实例化的对象增加private的构造器,防止误导他人

第五条、避免创建不必要的对象

  1.不可变对象尽量避免用构造器去创建对象,如果一个对象同时提供了构造器和工厂方法,尽量使用工厂方法。

  2.一些频繁调用的方法中,如果有一些不需要变化的对象,可以放在类变量中,如果初始化开销比较大,可以实现延迟加载(延迟加载会增加方法复杂度,如果开销不大,避免使用)

  3.自动装箱,虽然新版本jdk支持基本类型以装箱基本类型的混用,但混用会导致自动装箱,影响性能,所以优先使用基本类型,避免无意识的自动装箱。

第六条、消除过期对象

  1.当自己维护内存是,要注意清除不需要对象的引用(一些引用业务上以及失效,但是引用仍然保留(数组中常见),这种情况要手动消除引用通知gc回收)

  tip:缓存,WeakHashMap了解一下

第七条、慎用中介方法finalize()

转载于:https://www.cnblogs.com/jiangjil/p/9498311.html

Effect Java 学习笔记-对象的创建与销毁相关推荐

  1. Effictive Java学习笔记1:创建和销毁对象

    建议1:考虑用静态工厂方法代替构造器 理由:1)静态方法有名字啊,更容易懂和理解.构造方法重载容易让人混淆,并不是好主意 2)静态工厂方法可以不必每次调用时都创建一个新对象,而公共构造函数每次调用都会 ...

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

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

  3. Effective Java读书笔记三:创建和销毁对象

    第1条:考虑用静态工厂方法代替构造器 对于类而言,为了让客服端获得它的一个实例最常用的的一个方法就是提供一个公有的构造器.还有一种方法,类可以提供一个公有的静态工厂方法(static factory ...

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

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

  5. java学习笔记day07 成员变量与局部变量、形式参数、匿名对象、封装、private、this、构造方法、类详细讲解、static

    java学习笔记day07 1.成员变量和局部变量的区别 定义变量的注意事项 2.形式参数⭐ [P175] 形参是个类名,要的其实是一个对象 3.匿名对象(了解即可) 4.封装 class Stude ...

  6. Java学习笔记:创建线程的两种方法

    Java学习笔记:创建线程的两种方法 一.预备工作 1.创建Maven项目ThreadDemo 2.在pom.xml里添加依赖 二.继承Thread类创建子线程

  7. java 注销变量_[ Java学习基础 ] Java对象的创建和销毁

    类实例化可生成对象,实例方法就是对象方法,实例变量就是对象属性.一个对象的生命周期包括三个阶段:创建.使用和销毁. 创建对象 创建对象包括两个步骤:声明和实例化. 1.声明 声明对象与声明普通变量没有 ...

  8. java学习笔记13--反射机制与动态代理

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...

  9. java学习笔记12--异常处理

    java学习笔记系列: java学习笔记11--集合总结 java学习笔记10--泛型总结 java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 j ...

最新文章

  1. linux命令行颜色
  2. 关于chm文件打不开的解决方案
  3. c4droid语言字体颜色,关于printf如何输出颜色
  4. [Web开发] MySpace 发布开发接口
  5. 从前端到后端的跨域攻击与防御
  6. centos7安装rabbitmq 总结
  7. Oracle数据库常用脚本
  8. 2022最新iApp源码(破解ZIP密码)+已编译的成品
  9. 省市定位(省市区三级联动插件Distpicker)
  10. ArcCatalog中连接SDE数据库
  11. html导出excel加边框,利用js对象Blob导出的excel,有办法把表格的边框给浮现出来...
  12. dedecms教程:织梦建站教程之如何为内容模型添加新字段?
  13. ios 渐变透明背景_PPT设计的总是太单调,不如换个背景试试,超精彩!
  14. openbsd运行Linux应用程序,OpenBSD操作系统(1)——服务管理程序rcctl 类似linux下的service或syst...
  15. 卡西欧计算机亮度,卡西欧怎么调3秒灯
  16. 飞儿卡斯单片机学习(一)
  17. 【Dart 教程系列第 28 篇】Dart中的 Map 和实体类的相互转换
  18. IEEE754标准原文,及浮点数在线转换
  19. 2018ccpc吉林 C:JUSTICE
  20. Android抓包指南①: 使用Fiddler抓HTTP/HTTPS包

热门文章

  1. 重构路上遇到的一些兼容性问题
  2. 当当网首页——JS代码
  3. ServletContext 与application的异同
  4. poj 1328 Radar Installation
  5. Exchange禁用中继后仍然被中继的处理方法
  6. PCB 使用Nginx让IIS7实现负载均衡
  7. Mysql数据库 sql 语句调优
  8. C语言 · 身份证号码升级
  9. Android图片轮播
  10. radioGroup中radiobutton不能互斥问题