Effective Java(第3版)第8 - 11章总结

看第二遍的过程中,总结了这些笔记。废话挺多,翻译也很一般,读起来略费劲。有些知识点实用性很低,或者比较初级,就略过了。个人认为此书不值豆瓣那高分。

代码见github仓库JavaSE中的cn.tl.effective包下,其中还有很多其他代码


第54条:返回零长度的数组或者集合,而不是 null

如果返回 null,那样会使 API 更难以使用,也更容易出错,而且没有任何性能优势

第57条:将局部变量的作用域最小化

在我们第一次需要它的地方进行声明,可读性和维护性更高

第57条:了解和使用类库(随机数)

  • 并发编程时,Random 采取 CAS 操作,会造成很多线程自旋,导致性能下降。
  • ThreadLocalRandom 每个线程都维护一个种子变量,不存在竞争,性能更高。
  • 对于Fork Join Pool 和并行 Stream,则使用 SplittableRandom

第60条:如果需要精确的答案,请避免使用 float 和 double

在货币计算中,请使用 BigDecimal、int、long。

  • 创建BigDecimal对象务必使用字符串的构造函数:BigDecimal(String val)。
  • 使用int、long时,货币单位为分,自行处理小数点。

第63条:了解字符串连接的性能

在循环体里面禁止使用"+"连接符,详情请参考:Java字符串的“==”和“+”

第68条:遵守普遍接受的命名惯例

多看看 JDK、开源框架源码,学习其代码风格,是很重要的!

第79条:避免过度同步

过度同步可能导致性能降低、死锁,甚至不确定的行为。通常来说,在同步区域内做尽可能少的工作。

第80条:executor、task、stream 优先于线程

不要显式的创建线程,应该使用线程池。详情请参考:理解Java线程池ThreadPoolExecutor

第83条:慎用延迟初始化

在大多数情况下,正常的初始化要优先于延迟初始化。面试中比较典型的问题就是懒汉式的单例,详情请参考:[第3条:用私有构造器或者枚举类型强化 singleton 属性]

你可能感兴趣的:(Effective Java(第3版)第8 - 11章总结)