闲来无事看看《effective java 2》书,里面很多条例记录几个自己比较有益的内容
-
避免不必要的对象生成。尽量复用。优先考虑基础类型
-
消除过期对象引用,防止内存泄漏。可以参考weekHashMap
-
覆盖equals必须满足:1.自反性,2.一致,3.传递性,4.对称,5.非空
-
覆盖equals时必须覆盖hashCode。 相同对象必须拥有相同散列码
-
尽量覆盖toString(),提供debug展示信息
-
compareTo 覆盖注意自反性,传递性,对称性。最后尽量让compareTo==equals
-
检查方法参数的有效性
-
必要时对方法参数做保护下拷贝。参数如果是可变的,例如类。在方法内部检测参数时,拷贝参数再检测。防止对象改变。
-
优先使用for-each。以下三种不能用for-earch: 1.过滤:遍历并删除。用迭代器(iterator) 2.转换:遍历并取代转换。用迭代器或者数组索引 3.平行迭代:遍历。 用迭代器或者数组索引
48.如果需要精确答案,避免使用float,double
-
基本类型优先于撞向基本类型。基本类型和装箱类型混用时,装箱基本类型自动拆箱。 性能更佳优越;除一下情况不能使用基本类型:
-
集合 2.参数化类型ThreadLocal 3.进行反射的方法调用
-
同步可变数据。 同步:互斥,内存可见(其他线程可见修改后效果)。 或者不共享可变数据,共享不可变数据。
-
谨慎实现Serializable UUID如果没有则通过复杂的算法得到一个uuid.根据类名,实现接口名称。成员变量生成。如果修改则会发生改变。影响兼容性。 容易出现bug.和安全漏洞(对象反序列化,通过非构造器方法实现类实例)
问题队列:
-
,<<,>>>二进制操作
- |=,&=c操作符
- 遍历 Iterator 删除item没有问题。直接for-each删除item报错:concurrentModificationException..
- jvm 内存模型