Effective Java
A:创建和销毁对象
1:考虑用静态工厂方法代替构造函数。
2:使用私有构造函数强化singleton属性。
3:通过私有构造函数强化不可实例化的能力。
4:避免创建重复的对象。
5:消除过期的对象引用。
6:避免使用终结函数(finalizer)。
B:对于所有对象都通用的方法。
7:在改写equals的时候请遵守通用约定。
8:改写equals时总是要改写hashCode。
9:总是要改写toString。
10:谨慎地改写clone。
11:考虑实现Comparable。
C:类和接口
12:使类和成员的可访问能力最小化。
13:支持非可变性。
14:复合优先于继承。
15:要么专门为继承而设计,并给出文档说明,要么禁止继承。
16:接口优于抽象类。
17:接口只是被用于定义类型。
18:优先考虑静态成员类。
D:C语言结构的替代
19:用类代替结构
20:用类层次来代替联合。
21:用类来代替enum结构
22:用类和接口来代替函数指针
E:方法
23:检查参数的有效性。
24:需要时使用保护性拷贝
25:谨慎的设计方法的原型
26:谨慎的使用重载
27:返回零长度的数组而不是null
28:为所有导出的API元素编写文档注释
F:通用程序设计
29:将局部变量的作用域最小化
30:了解和使用库
31:如果要求精确的答案,请避免使用float和double
32:如果其他类型更合适,则尽量避免使用字符串
33:了解字符串连接的性能
34:通过接口引用对象
35:接口优先于映像机制。
36:谨慎的使用本地方法
37:谨慎的进行优化
G:异常
38:遵守普遍接受的命名惯例
39:只针对不正常的条件才使用异常
40:对于可恢复的条件使用被检查的异常,对于程序错误使用运行时异常
41:避免不必要的使用被检查的异常
42:尽量使用标准的异常。
43:抛出的异常要适合于相应的抽象
44:每个方法抛出的异常都要有文档
45:在细节消息中包含失败—捕获信息
46:努力使失败保持原子性
47:不要忽略异常
H:线程
48:对共享可变数据的同步访问
49:避免过度的同步
50:永远不要在循环的外面调用wait
51:不要依赖于线程调度器
52:线程安全性的文档化
53:避免使用线程组
I:序列化
54:谨慎地实现Serializable
55:考虑使用自定义的序列号形式
56:保护性地编写readObject方法
57:必要时提供一个readReasolve方法