一、考虑用静态工厂方法代替构造器

1、此处的静态工厂方法是指返回指为类的对象的静态方法,而不是设计模式中的静态工厂方法。

2、静态工厂方法的优势有:

a、使用不同的方法名称可显著地表明两个静态工厂方法的不同,而不像构造器,名字只能是类名。

b、并不是每次调用静态工厂方法,都会重新构造一个新的对象。

c、可以返回类型的子类型的对象。

d、创建参数化类型的实例时,代码变得简洁了。

3、静态工厂方法的缺点有:

a、类如果不含有公有的或者受保护的构造器,就不能被子类化(静态工厂方法的存在导致构造器存在的必要性降低)

b、与其他的静态方法实际上没有任何区别。

4、静态工厂方法的惯用名:

a、valueOf(类型转换方法)

b、of(同valueOf,在EnumSet中流行)

c、getInstance

d、newInstance(返回新的实例对象)

e、getType(处于不同的类时使用,返回的实例对象的类型是Type)

f、newType(同getType,返回新的实例对象)

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

1、重叠构造器(telescoping constructor)模式:第一构造器只包含必要的参数,后面的构造器依次叠加可选参数。

2、JavaBeans模式:无参的构造器构造对象,调用setter方法来设置必要的参数和可选参数。

3、Builder模式:不直接生成想要的对象,让客户端利用必要的参数来调用构造器(或静态工厂),得到一个builder对象,然后客户端在builder对象上调用类似于setter的方法,来设置可选参数。最后,客户端调用无参的build方法来生成不可变的对象。

4、设置了参数的builder生成了一个很好的抽象工厂。客户端将一个builder传给方法,该方法能够为客户端创建一个或多个对象。

5、构建器的缺点:

a、为了创建对象,必须要先创建构建器,带来性能损耗

b、使用过程比重叠构建器模式更加冗长。

6、使用时机:类的构造器或者静态工厂中具有多个参数,特别是含有大多数参数都是可选的时候,Builder模式是不错的选择。

三、用私有构造器或者枚举类型强化Singleton属性

1、仅被实例化一次的类,称为Singleton,代表本质上唯一的系统组件。Singleton会使它的客户端测试变得十分困难。

2、实现Sigleton的三种方法:

a、公有静态成员是个final域(自己保证序列化,需要额外的操作:比如transient所有实例域,提供readResolve方法等)

b、公有静态工厂方法(自己保证序列化,需要额外的操作:比如transient所有实例域,提供readResolve方法等)

c、只包含一个元素的枚举类型。(最佳方法)

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

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

1、注意避免过度问题,除非对象是重量级的,或者没有必要维护自己的对象池。

六、消除过期的对象引用

1、如果类是自己管理内存,就应该要警惕内存泄漏问题。

2、内存泄漏的另一个常见来源是缓存,使用WeakhashMap可以解决部分问题

3、内存泄漏的第三个来源是监听器和其他回调。WeakHashMap可以解决部分问题。

七、避免使用终结方法

1、除非是为了作为安全网,或者为了终止非关键的的本地资源,否则不使用终结方法。注意“终结方法链”不会自动执行,需要自己调用super.finalize方法。或者对于公有的非final类,考虑使用总结方法守卫者。

Effective Java 学习笔记之创建和销毁对象的更多相关文章

  1. 【Effective Java读书笔记】创建和销毁对象(一):考虑使用静态工厂方法代替构造器

    类可以提供一个静态方法,返回类的一个静态实例,如Boolean包装类的一个获取实例的静态方法 public static Boolean valueOf(boolean b) { return (b ...

  2. Effective Java 读书笔记之一 创建和销毁对象

    一.考虑用静态工厂方法代替构造器 这里的静态工厂方法是指类中使用public static 修饰的方法,和设计模式的工厂方法模式没有任何关系.相对于使用共有的构造器来创建对象,静态工厂方法有几大优势: ...

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

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

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

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

  5. effective java 第2章-创建和销毁对象 读书笔记

    背景 去年就把这本javaer必读书--effective java中文版第二版 读完了,第一遍感觉比较肤浅,今年打算开始第二遍,顺便做一下笔记,后续会持续更新. 1.考虑用静态工厂方法替代构造器 优 ...

  6. Effective Java——(一)创建和销毁对象

    第一条 考虑用静态工厂方法代替构造器 什么叫静态工厂方法,就是通过在类中通过静态方法对对象初始化. 比如说 public class StaticFactory { private String na ...

  7. Effective Java(一)—— 创建和销毁对象

    在客户端(调用端)获取自身实例的方法: 公有的构造器: 类的静态工厂方法: 1. 使用静态工厂方法代替构造器 Boolean 是对基本类型 boolean 的包装类: public final cla ...

  8. 【Effective Java】第二章-创建和销毁对象——1.考虑用静态工厂方法代替构造器

    静态工厂方法的优点: 可以赋予一个具有明确含义的名称 可以复用唯一实例,不必每次新建 可以返回原实例类型的子类对象 可以在返回泛型实例时更加简洁 缺点: 类如果不含有共有的或者受保护的构造器,就不能被 ...

  9. Effective Java笔记一 创建和销毁对象

    Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...

随机推荐

  1. JavaScript之闭包

    JavaScript之闭包 在JavaScript中,闭包恐怕是很多人不能理解的一个概念了,甚至很多人也会把闭包和匿名函数混淆. 闭包是有权访问另一个函数作用域中的变量的函数.首先要明白的就是,闭包是 ...

  2. Hibernate 配置文件与映射文件 总结

    hibernate是一个彻底的ORM(Object Relational Mapping,对象关系映射)开源框架. 一.Hibernate配置文件详解 Hibernate配置文件有两种形式:XML与p ...

  3. 淘淘商城基于maven和svn的理解

    首先了解下maven和svn是什么: Maven是一个项目的管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目的生命周期(Project Life ...

  4. Java数据结构——解析算术表达式

  5. Python + OpenCV2 系列:2 - 图片操作

    这些相当于我的学习笔记,所以并没有很强的结构性和很全的介绍,请见谅. 1 读取.写入图像 下面是一个简短的载入图像.打印尺寸.转换格式及保存图像为.png的例子: # -*- coding: utf- ...

  6. Ctrl+Scroll改变所有Editor的缩放比例 (Code::Blocks)

    Settings > Editor > Zooming resizes all editors

  7. Sky Box

    http://www.keithlantz.net/2011/10/rendering-a-skybox-using-a-cube-map-with-opengl-and-glsl/ http://o ...

  8. js与php转换时间戳

    php时间:1368524732 js代码: function getLocalTime(nS) { return new Date(parseInt(nS) * 1000).toLocaleStri ...

  9. Blue tooth

    一 . nordic BLE4.0 1.开发nordic的应用需要安装支持keil的pack库和插件 2.nordic的SDK很完整,实例涵盖了几乎所有的应用 https://www.nordicse ...

  10. EF How to use context.Set and context.Entry, which ships with EF4.1 ?

    How to use context.Set and context.Entry, which ships with EF4.1 ? Hello, I am trying to implement a ...