第一章 开始
effective java 主要涉及java.lang、java.util基本类库,某种程度上涉及java.util.concurrent和java.io共78条建议。
第二章 创建和销毁对象
===========================
1. 考虑使用静态方法工厂代替构造器
2. 遇到多个构造器参数时考虑用构建器
3. 用私有构造器或者枚举类型强化Singleton属性
4. 通过私有构造器强化不可实例化的能力
5. 避免创建不必要的对象
6. 消除过期的对象引用
7. 避免使用终结方法(finalizer)
===========================
第三章 所有对象通用方法
===========================
8. 覆盖equals时遵守通用约定
9. 覆盖equals总是要覆盖hashCode
10. 始终要覆盖toString
11. 谨慎覆盖clone
12. 考虑实现Comparable接口
===========================
第四章 类和接口
===========================
13. 使类和成员的可访问性最小化
14. 在公有类中使用访问方法而不是公有域
15. 使可变性最小化
16. 复合优先于继承
复合
17. 要么为继承而设计并提供文档说明,要么就禁止继承
18. 接口优于抽象类
接口
19. 接口只用于定义类型
20. 类层次优于标签类
类层次,标签类
21. 用函数对象表示策略
22. 优先考虑静态成员类
===========================
第五章 泛型
===========================
23. 请不要再新代码中使用原生态类型
原生态类型
24. 消除非受检警告
有些警告比较难以消除,如果可以证明引起警告的代码是安全的,可以用@SuppressWarnings(“unchecked”)
25. 列表优于数组
26. 优先考虑泛型
27. 优先考虑泛型方法
28. 利用有限的通配符来提升API的灵活性
29. 优先考虑类型安全的异构容器
调用方法时候不会混乱即类型安全,所有键值都是不同类型的即异构。
1 | public class Favorites { |
===========================
第六章 枚举和注解
===========================
30. 用Enum代替int常量
31. 用实例域代替序数
32. 用EnumSet代替位域
33. 用EnumMap代替序数索引
34. 用接口模拟可伸缩的枚举
35. 注解优于命名模式
36. 坚持使用Override注解
37. 用标记接口定义类型
===========================
第七章 方法
===========================
38. 检查参数的有效性
39. 必要时进行保护性拷贝
40. 谨慎设计方法签名
41. 慎用重载
42. 慎用可变参数
43. 返回零长度的数组或集合而不是null
44. 为所有导出的API元素编写文档注释
===========================
第八章 通用程序设计
===========================
45. 将局部变量的作用域最小化
46. for-each循环优于传统的for循环
47. 了解和使用类库
48. 如果需要精确的答案,请避免使用float和double
49. 基本类型优于装箱基本类型
50. 如果其他类型更合适,则尽量避免使用字符串
51. 当心字符串连接的性能
52. 通过接口引用对象
53. 接口优于反射机制
接口与反射机制
54. 谨慎地使用本地方法
55. 谨慎地进行优化
56. 遵守普遍接受的命名惯例
===========================
第九章 异常
===========================
57. 只针对异常情况才使用异常
58. 对可恢复情况使用受检异常,对编程错误使用运行时异常
受检异常
59. 避免不必要地使用受检的异常
60. 优先使用标准的异常
61. 抛出与抽象相对应的异常
62. 每个方法抛出的异常都要有文档
63. 在细节消息中包含能捕获失败的信息
64. 努力使失败保持原子性
65. 不要忽略异常
===========================
第十章 并发
===========================
66. 同步访问共享的可变数据
67. 避免过度同步
68. executor和task优先于线程
69. 并发工具优先于wait和notify
70. 线程安全性的文档化
71. 慎用延迟初始化
72. 不要依赖线程调度器
73. 避免使用线程组
===========================
第十一章 序列化
===========================