Effactive Java读书笔记

第二章 创建和销毁对象

第1条:用静态工厂方法(static factory method)代替构造器

静态工厂方法五大优势:

  1. 他们有名称;
  2. 不必再每次调用他们的时候都创建一个新对象;
  3. 可以返回原返回类型的任何子类型对象;
  4. 所返回的对象的类可以随着每次调用而发生变化,这取决于静态工厂方法的参数值;
  5. 方法返回的对象所属的类,在编写包含该景泰工程方法的类时可以不存在;
    (构成了服务提供者框架(Service Porvider Framework),服务提供者框架中有三个重要的组件:服务接口(Service Interface)、提供者注册API(Provider Registration API)、服务访问API(Service Access API))

静态工厂方法两大缺点:

  1. 类如果不含共有的或者受保护的构造器,就不能被子类化;
  2. 程序员很难发现他们;
    列举一些静态工厂方法的惯用名称:
    from——类型转换方法
    of——聚合方法
    valueOf
    instance或者getInstance
    create或者newInstance
    getType
    newType
    type
第2条:遇到多个构造器参数时要考虑使用构建器
Builder模式灵活,使构造器动态化(模拟了具名的可选参数)
Builder模式可能存在性能问题
第3条:用私有构造器或者枚举类型强化Singleton属性
第4条:通过私有构造器强化不可实例化的能力
public class UtilityClass{
    
    
	private UtilityClass{
    
    
    	throw new AssertionError();	//保证该类在任何情况下都不可以被实例化
    }
}
第5条:优先考虑依赖注入来引用资源
第6条:避免创建不必要的对象

对于同时提供了静态工厂和构造器的对象,优先使用静态工厂创建。构造器会多次创建对象,而静态工厂创建的对象可以复用(对象内容无需改变的情况下)。

第7条:消除过期的对象引用

导致内存泄漏的三种情况:
1、栈中弹出对象不会被当作垃圾回收,因为栈内部维护着这些过期引用:一但不使用,清空对象即可;
2、缓存容易被遗忘:使用WeakHashMap代替缓存、缓存应该定期清除没用的项(LinkedHashMap);
3、监听器和其他回调:注册回调后取消回调、确保回调立即被当作垃圾回收的最佳方法是只保存他们的弱引用(weakreference),例如只将它们保存成WeakHashMap中的键;

第8条:避免使用终结方法和清除方法
第9条:try-with-resources优先于try-catch

第三章 对于所有对象都通用的方法

猜你喜欢

转载自blog.csdn.net/qq_16253859/article/details/118884994