Skip to content

Instantly share code, notes, and snippets.

@xiuhy
Created July 5, 2017 15:42
Show Gist options
  • Save xiuhy/fb41652f4e67b4d997b7e460afae2dfd to your computer and use it in GitHub Desktop.
Save xiuhy/fb41652f4e67b4d997b7e460afae2dfd to your computer and use it in GitHub Desktop.
effective java 笔记

闲来无事看看《effective java 2》书,里面很多条例记录几个自己比较有益的内容

  1. 避免不必要的对象生成。尽量复用。优先考虑基础类型

  2. 消除过期对象引用,防止内存泄漏。可以参考weekHashMap

  3. 覆盖equals必须满足:1.自反性,2.一致,3.传递性,4.对称,5.非空

  4. 覆盖equals时必须覆盖hashCode。 相同对象必须拥有相同散列码

  5. 尽量覆盖toString(),提供debug展示信息

  6. compareTo 覆盖注意自反性,传递性,对称性。最后尽量让compareTo==equals

  7. 检查方法参数的有效性

  8. 必要时对方法参数做保护下拷贝。参数如果是可变的,例如类。在方法内部检测参数时,拷贝参数再检测。防止对象改变。

  9. 优先使用for-each。以下三种不能用for-earch: 1.过滤:遍历并删除。用迭代器(iterator) 2.转换:遍历并取代转换。用迭代器或者数组索引 3.平行迭代:遍历。 用迭代器或者数组索引

48.如果需要精确答案,避免使用float,double

  1. 基本类型优先于撞向基本类型。基本类型和装箱类型混用时,装箱基本类型自动拆箱。 性能更佳优越;除一下情况不能使用基本类型:

  2. 集合 2.参数化类型ThreadLocal 3.进行反射的方法调用

  3. 同步可变数据。 同步:互斥,内存可见(其他线程可见修改后效果)。 或者不共享可变数据,共享不可变数据。

  4. 谨慎实现Serializable UUID如果没有则通过复杂的算法得到一个uuid.根据类名,实现接口名称。成员变量生成。如果修改则会发生改变。影响兼容性。 容易出现bug.和安全漏洞(对象反序列化,通过非构造器方法实现类实例)

问题队列:

  1. ,<<,>>>二进制操作

  2. |=,&=c操作符
  3. 遍历 Iterator 删除item没有问题。直接for-each删除item报错:concurrentModificationException..
  4. jvm 内存模型
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment