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

Effective Java 读书笔记(1)

    博客分类:
  • JAVA
阅读更多
    最近比较闲,就打算找点时间把一直没看的Effective Java第二版给看了,为了督促自己看完,同时为了加深记忆,决定写篇读书笔记,其实也就是记一下里面提到的各项建议,将来回顾时比较方便。
    1,用静态工厂方法代替构造函数。静态工厂方法的好处是
       1.1 静态工厂方法有名字,你可以很容易的决定选择哪个方法,而不是像用构造函数一样需要根据参数列表来选择
       1.2 静态工厂方法不一定需要创建对象,可以使用预先缓存的对象,
       1.3 静态工厂方法可以返回指定返回类型的任意的子类型,可以在未来修改实现而不需要修改方法签名
       1.4 减少创建泛型实例的复杂度
     静态工厂方法的缺点是
       1.5 如果你不提供public或者protected的构造函数,这个类就不能被继承
       1.6 不易跟其他的静态方法区分开来,当然可以通过valueOf, getInstance这类的命名来使静态工厂方法显眼一些。

    2,如果构造函数的可选参数很多,考虑使用builder模式,这种模式模拟了Python里的命名参数,简单说就是在类里只有私有的构造函数,然后再创建一个公有静态内部类,命名为Builder或者其他的, 然后用builder来创建这个类的实例。
    3,用私有构造函数或者enum来创建单例。创建单例有几种方法:
       3.1 private的构造函数,public static final的一个field,指向本类的实例,调用者直接引用这个field。
       3.2 把上面说的field改成rpivate的,增加一个getInstance方法返回这个field。
       3.3 创建一个只有一个元素的enum,这是创建单例的最好方法。
    如果这个单例是可序列化的,必须要注意改写readSolve方法。
    4,只有私有的构造函数,让类不可以被实例化,对工具类比较有用。
    5,避免创建不必要的对象,比如不要new一个String,尽量避免auto box/unbox。但是也不要矫枉过正,该创建的对象还是要创建,也不要给什么对象都搞个对象池。这条正好和第39条相对,本条是“当可以使用已有的对象时就不要创建新的对象”,而第39条是“当需要创建新对象时,千万不要重用已有的对象”。
    6,消除废弃的对象引用,java虽然不用操心内存回收,但是也可能会有内存泄漏的,对于自己管理内存的类,要当心内存泄漏,还有就是缓存里的对象,以及监听器和回调函数等。
    7,避免使用finalize函数,gc的执行是无法保证的,尽量通过try...finally来回收资源,如果实在要使用finalize函数,要记得显式调用父类的finalize方法。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics