Effective java 整理(第三版)

整理一下自己effective java

创建 和销毁对象

  1. 静态工厂方法代替构造器

优点

  • 静态工厂方法有名字 ,是客户端代码更容易阅读
  • 不必每次都创建一个新对象
  • 可以返回任意子类型的对象
  • 返回的对象可以在每次调用下发生变化取决于参数值(这应该是指内部的参数,而不是说的传递的参数)
  • 方法返回的具体的类可以在编写该静态方法时不存在(第三条)

缺点

  • 类中必须有公共构造器或者受保护的构造器
  • 而是很难找 (名字任意的问题)所以用常用的一些关键字 from of valueof instance create getType newType
    场景
  • 当一个类需要有多个带有相同的签名的构造器时,就用静态工厂替代
  • 不想重复创建某个对象
  1. 遇到多个构造器参数的时候用建造者模式(Builder)
    构造器多个参数 导致创建错误(容易输错,且传了许多没意义的参数)
    javabean模式中(get set) 导致构造过程不一致 ,使类不可能不变
    而builder 模式中就没有这两种问题

  2. 用私有构造器或枚举类型强化单列
    Singleton通常表示一个无状态对象,函数,本质唯一的系统组件。
    两种实现

  • 构造器私有 有一个private static final修饰的实例然后提供一个静态的共有返回方法、
  • 枚举类型实现
   public enum Elvis{
      INSTANCE;
      public void leaveTheBuilding(){
      }
    }
  1. 通过私有构造器强化不可实例的类
    就是说通过私有构造器修饰工具类
  1. 优先考虑依赖注入引用资源

  2. 创建不必要的对象
    不可变的对象指域不会发生变化(用静态工厂方法创建)
    比如正则里的Pattern对象 ,一旦创建就是不变的。而且耗费较高,因此要缓存起来
    优先使用基本类型,当心无意识自动装箱

  1. 消除过期的对象引用
    例子
    手写的一个栈 (用一个Object[] 数组来存储对象,一个int 的值管理 栈顶)
    当栈再收缩时 应该 置为null 否则内存泄漏(但类在自己管理内存的时候)
    weakhashmap 一个对象的生命周期的由外键的引用决定时就可用
    接口回调 和监听器 产生的内存泄漏

  2. 避免使用终结方法 和清除方法

  3. try - with -resource 优先于 try - finally

    try(Inputstram in =new FileInputStream(path);
          OutputStream out = new FileOutPutStream()){
        byte[] buf = new byte[BUFFER_SIZE];
        int n;
        while(n = in.read(buf) >= 0){
          out.write(buf,0,n);
        }  
    }

你可能感兴趣的:(Effective java 整理(第三版))