《Effective Java》读后感(二)
2014-01-18 23:03
302 查看
上一篇读后感没有记录实质性的东西,从这篇开始,会记录一些我觉得很重要或者很经典的东西。
对称性:y.equals(x)返回true,x.equals(y)也必须返回true
传递性:x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也必须返回true
一致性:只要对象没有修改,调用equals方法会返回一致的结果
对于任何非null值x,x.equals(null)必须返回false
覆盖equals必须覆盖hashCode,所以:
对象没有被修改,hashCode必须始终返回同一个整数
如果两个对象调用equals相等,那么他们的hashCode必须返回同一个整数
有多少field计算多少次,hash初始值设为任意非零整数。
一定要返回super.clone()
如果有引用,则要clone引用
不要递归clone引用,会引起栈溢出
不要忘记检查并抛出CloneNotSupportedException
线程安全的类记得将clone方法也实现为同步的
尽量不适用Cloneable,而用其他方式来代替它
equals的约定
自反性:x.equals(x)必须返回true对称性:y.equals(x)返回true,x.equals(y)也必须返回true
传递性:x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也必须返回true
一致性:只要对象没有修改,调用equals方法会返回一致的结果
对于任何非null值x,x.equals(null)必须返回false
覆盖equals必须覆盖hashCode,所以:
对象没有被修改,hashCode必须始终返回同一个整数
如果两个对象调用equals相等,那么他们的hashCode必须返回同一个整数
一个推荐的hash算式
hash = 31 * hash + (需要参与hash的field计算的int值)有多少field计算多少次,hash初始值设为任意非零整数。
Clone
覆盖注意事项:一定要返回super.clone()
如果有引用,则要clone引用
不要递归clone引用,会引起栈溢出
不要忘记检查并抛出CloneNotSupportedException
线程安全的类记得将clone方法也实现为同步的
尽量不适用Cloneable,而用其他方式来代替它
复合优先于继承
因为继承太过于依赖父类,父类的更改会对子类造成较大的损害。只有当B is A的时候,才能让B继承A。相关文章推荐
- 《Effective Java》读后感(三)
- 《Effective Java》读后感(一)
- 《Effective Java》读后感(四)
- 《Effective Java》 读后感(一)
- Effective Java系列读后感(二)-对于所有对象都通用的方法
- Effective Java系列读后感(三)-类和接口
- 《大道至简》第二章读后感
- Effective Java 2nd 读书笔记(思维导图)
- 《需求工程——软件建模与分析》读后感之一
- 《大道至简》第三章读后感
- 《编写有效用例》-读后感2
- 《大道至简》第四章读后感
- 读后感
- 大道至简第五章读后感
- 大道至简第五章读后感
- 大道至简第五章读后感
- 《大道至简》第六章读后感
- 大道至简-第六章读后感
- 《大道至简》第七八章读后感
- 《大道至简》第七八章读后感