来自《Effective Java》的57条程序设计建议

每一条都是在编程经验中总结的,即使看完了Effective Java这本书,也不能说明完全懂了,列出了这些建议,看看自己每次看到这些建议时,有没有更加深刻的体会。

创建和销毁对象

1、考虑用静态工厂方法代替构造函数

2、使用私有构造函数强化singleton

3、通过私有构造函数强化不可实例化的能力

4、避免创建重复的对象

5、消除过期的对象引用

6、避免使用终结函数

对于所有对象都通用的方法

7、在改写equals的时候请遵循通用约定

8、改写equals时总是要改写hashCode

9、总是要改写toString

10、谨慎地改写clone

11、考虑实现Comparable接口

类和接口

12、使类和成员的可访问能力最小化

13、支持非可变性

14、复合优先于继承

15、要么专门为继承而设计,并给出文档说明,要么禁止继承

16、接口优于抽象类

17、接口只是被用于定义类型

18、优先考虑静态成员类

C语言结构的替代

19、用类代替结构

20、用类层次来代替联合

21、用类来代替enum结构

22、用类和接口来代替函数指针

方法

23、检查参数的有效性

24、需要时使用保护性拷贝

25、谨慎设计方法的原型

26、谨慎的使用重载

27、返回零长度的数组而不是null

28、为所有导出的API元素编写文档注释

通用程序设计

29、将局部变量的作用域最小化

30、了解和使用库

31、如果要求精确的答案,请避免使用float和double

32、如果其他类型更适合,则尽量避免使用字符串

33、了解字符串连接的性能

34、通过接口引用对象

35、接口优先于映像机制

36、谨慎地使用本地方法

37、谨慎地进行优化

38、遵守普遍接受的命名惯例

异常

39、只针对不正常的条件才使用异常

40、对于可恢复的条件使用被检查的异常,对于程序错误使用运行时异常

41、避免不必要地使用被检查的异常

42、尽量使用标准的异常

43、抛出的异常要适合于相应的抽象

44、每个方法抛出的异常都要有文档

45、在细节消息中包含失败 - 捕获信息

46、努力使失败保持原子性

47、不要忽略异常

线程

48、对共享可变数据的同步访问

49、避免过多的同步

50、永远不要在循环的外面调用wait

51、不要依赖于线程调度器

52、线程安全性的文档化

53、避免使用线程组

序列化

54、谨慎地实现Serializable

55、考虑使用自定义的序列化形式

56、保护性地编写readObject方法

57、必要时提供一个readResolve方法

arthinking wechat
欢迎关注itzhai公众号