zoukankan      html  css  js  c++  java
  • 《Effective Java》要点总结

    对象创建和销毁

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

    2.遇到多个参数构造器时考虑用构建器。

    3.用私有构造器或枚举型强化Singleton。

        推荐使用枚举型,可以避免拷贝和重复创建的问题。

    4.通过私有构造器强化不可实例化的能力。

    5.避免创建不必要的对象。

       尽量使用String str = "XXX";而不是String str = new String("XXX");

    6.消除过期的对象引用。

    7.避免使用终结方法。

       终结方法的何时被调用或是否被调用是不确定的。

    对于所有对象通用的方法

    8.覆盖equals是要遵守通用规定。

       需要遵守自反性、对称性、传递性、一致性、非空性(x.equals(null)返回false)。

       Java库中的Timestamp对Date进行了扩展,增加了nanoseconds域,equals实现违反了对称性。不能将Timestamp和Date用于同一个集合中,会引起不正确的行为。

       提高equals的诀窍:a.使用==操作检查参数是否为这个对象的引用,如果比较操作可能很昂贵就值得这么做。b.使用instanceof操作检查参数是否为正确类型。c.把参数转换为正确的类型。d.覆盖equals是总要覆盖hashCode。e.不要企图让equals方法过于智能。f.不要将equals声明中的Object对象替换为其他类型。

    9.覆盖equals时总要覆盖hashCode。

    10.始终覆盖toString。

    11.谨慎地覆盖clone。

    12.考虑实现Comparable接口。

      Comparable的限制类似equals。compareTo的结果和equals的结果可能不一致。

    类和接口

    13.使类和成员的可访问性最小化。

    14.在公有类中使用访问方法而非公有域。

    15.使可变性最小化。

    16.复合优先于继承。

    17.要么为继承而设计,并提供文档说明,要么就禁止继承。

    18.接口优于抽象类。

    19.接口只用于定义类型。

    20.类层次由于标签类。

        标签类会造成代码和逻辑上的不清晰。

    21.用函数对象表示策略。

    22.优先考虑静态成员类。

    泛型

    23.不要在新代码中使用原生态类型。

    24.消除非受检警告。

    25.列表优于数组。

    26.优先考虑泛型。

        在需要消除警告时,尽可能的在小的范围内消除警告。

    27.优先考虑泛型方法。

    28.利用有限制通配符来提升API的灵活性。

        主要是通过?, 例如List<? extends T>。

    29.优先考虑类型安全的异构容器。

    枚举和注解

    30.用enum代替int常亮。

  • 相关阅读:
    112th LeetCode Weekly Contest Validate Stack Sequences
    112th LeetCode Weekly Contest Minimum Increment to Make Array Unique
    C# 有关系统音量的操作
    C# 关于时区的操作
    WordPress 设置GeoIP数据库目录权限时错误解决方案
    AtCoder Beginner Contest 113 C
    AtCoder Beginner Contest 113 B
    AtCoder Beginner Contest 113 A
    将Tomcat注册为Windows服务
    常用的调试方法
  • 原文地址:https://www.cnblogs.com/vectorli/p/5401258.html
Copyright © 2011-2022 走看看