乐趣区

Effective Java 3rd.Edition 翻译

推荐序
前言
致谢

第一章 引言

第二章 创建和销毁对象

第 1 项:用静态工厂方法代替构造器
第 2 项:遇到多个构造器参数时要考虑使用构建器
第 3 项:用私有构造器或者枚举类型强化 Singleton 属性
第 4 项:通过私有构造器强化不可实例化的能力
第 5 项:优先考虑依赖注入来引用资源
第 6 项:避免创建不必要的对象
第 7 项:消除过期的对象引用
第 8 项:避免使用终结方法和清除方法
第 9 项:try-with-resources 优先于 try-finally

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

第 10 项:覆盖 equals 时请遵守通用约定
第 11 项:覆盖 equals 时总要覆盖 hashCode
第 12 项:始终要覆盖 toString
第 13 项:谨慎地覆盖 clone
第 14 项:考虑实现 Comparable 接口

第四章 类和接口

第 15 项:使类和成员的可访问性最小化
第 16 项:要在公有类而非公有域中使用访问方法
第 17 项:使可变性最小化
第 18 项:复合优先于继承
第 19 项:要么设计继承并提供文档说明,要么禁止继承
第 20 项:接口优于抽象类
第 21 项:为后代设计接口
第 22 项:接口只用于定义类型
第 23 项:类层次优于标签类
第 24 项:静态成员类优于非静态成员类
第 25 项:限制源文件为单个顶级类

第五章 泛型

第 26 项:请不要使用原生态类型
第 27 项:消除非受检的警告
第 28 项:列表优于数组
第 29 项:优先考虑泛型
第 30 项:优先考虑泛型方法
第 31 项:利用有限制通配符来提升 API 的灵活性
第 32 项:谨慎并用泛型和可变参数
第 33 项:优先考虑类型安全的异构容器

第六章 枚举和注解

第 34 项:用 enum 代替 int 常量
第 35 项:用实例域代替序数
第 36 项:用 EnumSet 代替位域
第 37 项:用 EnumMap 代替序数索引
第 38 项:用接口模拟可扩展的枚举
第 39 项:注解优先于命名模式
第 40 项:坚持使用 Override 注解
第 41 项:用标记接口定义类型

第七章 Lambda 和 Stream

第 42 项:Lambda 优先于匿名类
第 43 项:方法引用优先于 Lambda
第 44 项:坚持使用标准的函数接口
第 45 项:谨慎使用 Stream
第 46 项:优先选择 Stream 中无副作用的函数
第 47 项:Stream 要优先用 Collection 作为返回类型
第 48 项:谨慎使用 Stream 并行

第八章 方法

第 49 项:检查参数的有效性
第 50 项:必要时进行保护性拷贝
第 51 项:谨慎设计方法签名
第 52 项:慎用重载
第 53 项:慎用可变参数
第 54 项:返回零长度的数组或者集合,而不是 null
第 55 项:谨慎返回 optinal
第 56 项:为所有导出的 API 元素编写文档注释

第九章 通用编程

第 57 项:将局部变量的作用域最小化
第 58 项:for-each 循环优先于传统的 for 循环
第 59 项:了解和使用类库
第 60 项:如果需要精确的答案,请避免使用 float 和 double
第 61 项:基本类型优先于装箱基本类型
第 62 项:如果其他类型更适合,则尽量避免使用字符串
第 63 项:了解字符串连接的性能
第 64 项:通过接口引用对象
第 65 项:接口优先于反射机制
第 66 项:谨慎地使用本地方法
第 67 项:谨慎地进行优化
第 68 项:遵守普遍接受的命名惯例

第十章 异常

第 69 项:只针对异常的情况才使用异常
第 70 项:对可恢复的情况使用受检异常,对编程错误使用运行时异常
第 71 项:避免不必要地使用受检异常
第 72 项:优先使用标准的异常
第 73 项:抛出与抽象对应的异常
第 74 项:每个方法抛出的所有异常都要建立文档
第 75 项:在细节消息中包含失败 - 捕获信息
第 76 项:努力使失败保持原子性
第 77 项:不要忽略异常

第十一章 并发

第 78 项:同步访问共享的可变数据
第 79 项:避免过度同步
第 80 项:executor、task 和 stream 优先于线程
第 81 项:并发工具优先于 wait 和 notify
第 82 项:线程安全性的文档化
第 83 项:慎用延迟初始化
第 84 项:不要依赖于线程调度器

第十二章 序列化

第 85 项:其他方法优先于 Java 序列化
第 86 项:谨慎地实现 Serializable 接口
第 87 项:考虑使用自定义的序列化形式
第 88 项:保护性地编写 readObject 方法
第 89 项:对于实例控制,枚举类型优先于 readResolve
第 90 项:考虑用序列化代理代替序列化实例

附录 与第 2 版中项目的对应关系
参考文献
关注公众号获取同步更新

退出移动版