美文网首页
《Effective Java中文版》-第3、4、5章

《Effective Java中文版》-第3、4、5章

作者: 46fdc45388ac | 来源:发表于2017-11-23 00:41 被阅读42次

    第三章 对于所有对象都通用的方法

    第8条:覆盖equals时请遵守通用约定(这一条值得深入)

    包括自反性、对称性、传递性、一致性、非空性(所有条目要求都可以演化成代码限定

    第9条:覆盖equals时总要覆盖hashCode

    否则会导致该类无法结合所有基于散列的集合正常运作。(hashCode的原理是做粗分类,而基于hash的集合原理上都是通过先比较hashCode分类再比较equals来优化速度的,如果不实现hashCode意味着比较hash的过程就会是false,重写的equals根本就不会有机会执行)

    hash算法的优秀程度决定hash集合的效率,普通原则是尽可能均匀分布到所有散列值但具体情况要具体而言之。

    第10条:始终要覆盖toString

    原始toString是类名+@+散列码的无符号十六进制表示

    第11条:谨慎地覆盖clone(clone有诸多问题,慎用)

    Cloneable接口的含义是,如果类实现了Cloneable,那么Object的clone方法就返回该对象的逐域拷贝,否则就会抛出CloneNotSupportedException异常。

    第12条:考虑实现Comparable接口

    Java中所有值类,都已经实现了Comparable

    Comparable是将对象与指定对象比较,如果小于、等于或大于时分别返回负数、0或正数。(所以到底是升序还是降序,是取决于排序方法而非比较方法。sort是默认升序排列)

    Comparable最好保持和equals一样的一致性,否则会引起集合异常。

    第4章 类和接口

    第13条:使类和成员的可访问性最小化(这一章可读性很高)

    核心是善用private、包级私有、protected、public

    注意理解域的概念,也有有私有域、公有域、静态域、final域等概念。(这里是本质的全代码都在域中的角度理解

    第14条:在公有类中适用访问方法而非公有域

    核心原则是保护数据,根据业务需求开放getter或setter,另外一个好处是,存在内部实现的可修改空间。

    第15条:使可变性最小化(本章高可读性)

    安全角度考虑,关注于成员的可变性,对于不可变的成员,尽量不要对外暴露setter。

    不可变对象本质上是线程安全的,他们不要求同步。

    第16条:复合优先于继承

    继承打破了封装性,所以跨包界的继承是很危险的(注意这里包界的概念和思想

    第17条:要么为继承而设计,并提供文档说明,要么禁止继承

    因为继承时会牵扯到代码和实现封装的问题

    第18条:接口优于抽象类

    接口的一个用于在于跨部门使用和设计(因为在A部门所需要的B部门实现CODE_A还没实现时就可以通过约定接口进行开发了)

    接口要谨慎定义,因为后期修改很麻烦(这里的后期是指jar包发布后,发布后,代码就不受控制了)

    第19条:接口只用于定义类型

    这里想说的是,如果接口只用于定义接口,那么被称为常量接口,是对接口不当使用。

    如果大量使用工具类到处的常量,可以使用静态导入(static import  1.5引入)

    第20条:类层次优于标签类

    这里的意思大概是,如果要引入类别标志参数,不妨考虑把类别标志参数代表的类型实现成不同的子类

    第21条:用函数对象表示策略

    策略模式的一种使用,通过使用静态内部类和静态成员变量来提供不同的策略实现。

    第22条:优先考虑静态成员类

    基于底层实现提供的优化策略

    第5章 泛型

    第23条:请不要在新代码中适用原生态类型

    原生态类型只是为了支持旧代码存在

    泛型的优势在于更安全和更清楚,怎么实现呢,通过编译时的类型检查

    第24条:消除非受检警告

    消除警告的最小颗粒是成员变量,消除时应该适用尽量小的颗粒以防止影响到其他需要警告的地方。

    第25跳:列表优先于数组

    列表做更严格的类型检查,数组则很多报错要等到运行时

    第26条:优先考虑泛型

    提供更通用实现

    第27条:优先考虑泛型方法

    一种写法 public static <E> Set<E> union(Set<E> s1,Set<E> s2)

    第28条:利用有限制通配符来提升API的灵活性

    Collection<?>  ,Collection<? super E> ,Collection<? extends E>  ,Collection<T extends Comparable<T>     

    (page 102)

    第29条:优先考虑类型安全的异构容器

    相关文章

      网友评论

          本文标题:《Effective Java中文版》-第3、4、5章

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