`
lt200819
  • 浏览: 182244 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

walter的《Effective JAVA》 读书笔记-第2章 创建和销毁对象

 
阅读更多

 

创建和销毁对象

转载请注明出处:http://lt200819.iteye.com/blog/1707699

1条:考虑用静态工厂方法代替构造器(静态工程方法不同于设计模式中的工厂方法)

静态工厂方法与构造器不同的优势在于:

1.它们有名称;

2.不必每次调用它们的时候都创建一个新的对象,类似单例模式。

3.可否返回原返回类型的任何子类型的对象。(服务提供者框架)

4.在创建泛型示例时,他们使代码变得更加简洁。(JDK1.6还没实现)

缺点:

1.类如果不含有公有的或者受保护的构造器,就不能被子类化(不能被继承,因为super()无法调用)

2.与其他的静态方法实际上没任何区别。

惯用名称:valueOf; of; getInstance; newInstance; getType;newType

第一反应用静态工厂

 

2条:遇到多个构造器参数是要考虑用构建器

如果类的构造器或者静态工厂中具有多个参数,设计这种类时,Builder模式就是种不错的选择,特别是当大多数参数都是可选的时候。与使用传统的重叠构造器模式相比,使用Builder模式的客户端代码将更易于阅读和编写,构建器也比JavaBeans更加安全(JavaBeans需要考虑线程同步)。

 

3条:用私有构造器或者枚举类型强化“单例”属性

包含单个元素的枚举类型实现单例,在功能上与公有域方法相近,但是它更加简洁,无偿地提供了序列化机制,绝对防止多次实例化,即使是在面对复杂的序列化或者反射攻击的时候。虽然这种方法还没有广泛使用,但是单元素的枚举类型已经成为实现Singleton的最佳方法。

 

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

 

5条:避免创建不必要的对象

静态初始化块初始化常量,可以用延迟初始化优化

要优先使用基本类型而不是装箱基本类型,要当心无意识的自动装箱

 

6条:消除过期的对象引用

栈内存泄露:只要类时自己管理内存,程序员就应该警惕内存泄露问题

缓存内存泄露:当所要的缓存项的生命周期是又该键的外部对象引用而不是值决定时,可以使用WeakHashMap来缓存。

监听器和回调:如果你实现了一个API,客户端在这个API中注册回调,却没有显示地取消注册,那么除非你采取某些动作,否则它们就会积聚。最佳方法是使用弱引用。

 

7:避免使用终结方法

除非是作为安全网,或者是为了终止非法关键的本地资源,否则请不要使用终结方法。在这些很少见的情况下,既然使用了终结方法,就要记住调用 super.finalize。如果用终结方法作为安全网,要记得记录终极方法的非法用法。最后,如果需要把终结方法与公有的非final类关联起来,可以考虑使用终结方法守卫者,以确保即使子类的终结方法未能调用super.finalize,该终结方法也会被执行。

转载请注明出处:http://lt200819.iteye.com/blog/1707699

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics