美文网首页
Effective Java 第三版笔记

Effective Java 第三版笔记

作者: yanix4536 | 来源:发表于2019-03-14 13:38 被阅读0次

    1、考虑以静态工厂方法代替构造函数

    优点:
    静态工厂方法有确切名称;
    静态工厂方法不需要在每次调用时创建新对象;
    可以通过静态工厂方法获取返回类型的任何子类的对象;
    返回对象的类可以随调用的不同而变化,作为输入参数的函数;
    当编写包含方法的类时,返回对象的类不需要存在。 


    缺点:
    没有公共或受保护构造函数的类不能被子类化;(优先考虑复合而不是继承)
    程序员很难找到它们;(from,of,valueOf,getInstance,newInstance,getType,newType,type)

    2、当构造函数有多个参数时,考虑改用构建器

    3、使用私有构造函数或枚举类型强化Singleton属性

    4、用私有构造函数实施不可实例化

    5、依赖注入优于硬连接资源

    6、避免创建不必要的对象

    7、排除过时的对象引用

    8、避免使用终结器和清除器

    9、使用 try-with-resources 优于 try-finally

    在使用必须关闭的资源时,总是优先使用 try-with-resources,而不是 try-finally。前者的代码更短、更清晰,生成的异常更有用。使用 try-with-resources 语句可以很容易地为必须关闭的资源编写正确的代码,而使用 try-finally 几乎是不可能的。

    10、覆盖 equals 方法时应遵守的约定

    反身性:对于任何非空的参考值 x,x.equals(x) 必须返回 true。
    对称性:对于任何非空参考值 x 和 y,x.equals(y) 必须在且仅当 y.equals(x) 返回 true 时返回 true。
    传递性:对于任何非空的引用值 x, y, z,如果 x.equals(y) 返回 true,y.equals(z) 返回 true,那么 x.equals(z) 必须返回 true。
    一致性:对于任何非空的引用值 x 和 y, x.equals(y) 的多次调用必须一致地返回 true 或一致地返回 false,前提是不修改 equals 中使用的信息。
    非空性:对于任何非空引用值 x,x.equals(null) 必须返回 false。


    警告:
    当你覆盖 equals 时,也覆盖 hashCode。
    不要自作聪明。 一般来说,考虑到任何形式的混叠都不是一个好主意。
    不要用另一种类型替换 equals 声明中的对象。


    相关文章

      网友评论

          本文标题:Effective Java 第三版笔记

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