美文网首页
Effective java 整理(第三版)

Effective java 整理(第三版)

作者: 陈沉成染 | 来源:发表于2019-06-04 19:20 被阅读0次

    整理一下自己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 整理(第三版)

          本文链接:https://www.haomeiwen.com/subject/xuuazqtx.html