设计

1.优雅终将得到回报

2.先能运行,再求快速

3.谨记"分而治之"原则

4. 区分类的编写者和使用者(客户端程序员)

5.编写类的时候,类的名称要非常清晰,不需要注释也能理解

6.分析和设计必须使系统中的类,它们的公共接口以及类之间(尤其是与基类之间)的关系必须达到最少

7.尽量让所有的东西自动化

8.在编写类之前先编写测试代码,以验证这个类是否设计完备

9.所有软件设计中的问题,都可以通过"引入额外的间接层次"得到简化

10.引入间接概念层次要有意义

11.尽可能使类原子化

12.当心冗长的参数列表

13.不要一再重复

14.小心Switch语句或嵌套的if-else子句

15.从设计的观点来看,要找出变动的因素,并使它和不变的因素相分离

16.不要依靠子类化来扩展基础功能

17.更少意味着更多

18.大声朗读你的类,确保它们符合逻辑

19.在判断应该使用继承还是组合的时候,考虑一下是否需要向上转型成基类型

20.采用字段来表示数值的变化,使用方法覆盖来表示行为的变化

21.小心重载

22.使用异常体系

23.有时候仅仅使用聚合就能完成工作

24.从客户端程序员和程序维护者的角度进行思考

25.当心"巨型对象综合症

26.如果你只能采用某种别扭的方式才能实现某个功能,请将这部分代码至少局限在某个类内部

27.如果你只能采用某种不可移植的方式才能实现某个功能.请将其抽象成服务,并局限在某个类内部

28.对象不应仅仅用来持有数据

29.在原有类的基础上编写新类时,首先考虑用组合

30.使用继承和方法覆盖来表达行为上的差异,使用字段来表示状态的变化

31.当心"变异性"

32.注意继承期间的"限制"

33.使用设计模式来消除那些"纯粹的功能性代码"

34.当心"分析瘫痪"的情况

35.当认为自己已经获得了一个优秀的分析,设计或实现时,进行一次全面评审

实现

1.一般来说,请遵守Sun的程序编写习惯

2.无论使用何种编写风格,如果你的团队(或整个公司,那就更好了)能够加以标准化,那么的克能带来显著效果

3.遵守标准的大小写规范

4.不要为私有字段加上你自己的"修饰"符号

5.编写通用性的类时,请遵守标准形式,包括定义equals(),hashCode(),toString(),clone()(实现Cloneable接口,或者选择其他对象复制策略,比

如序列化),并实现Compareable和Seriliable接口

6.对于那些"获得或改变私有字段值"的方法,请使用JavaBean的"get","set","is"等命名习惯

7.对于你编写的每一个类,请使用JUnit为它编写测试

8.有时需要通过继承才能访问基类的受保护成员

9.应避免纯粹为了提高执行速度而采用final方法

10.如果两个类在功能性上产生了关联(比如容器和迭代器),那么请试着让其中一个类成为另一个的内部类

11.在任何时候,都要警惕那些相互之间高度耦合的类,考虑一下使用内部类为程序编写和维护带来的好处

12.不要跳入过早优化的陷阱

13.尽可能缩小对象的作用域,这样对象的可见范围和生存期也都会尽可能地小

14.使用Java标准库提供的容器

15.对一个健壮的程序而言,每一个部件都必须是健壮

16.宁可在编译期发生错误,也不要在执行期发生错误

17.当心冗长的方法定义

18.尽量使用"private"关键字

19.大量使用注释,并使用javadoc的"文档注释语法"来生成程序的文档

20.避免使用"魔术数字"

21.在编写构造器时,请考虑异常

22.在构造器中只做必要的动作,将对象设定为正确的状态

23.客户端程序员用完对象之后,如果你的类需要任何清理动作,请将此动作放到一个精心定义的方法中

24.finalize()方法的职责只能是为了调试的目的而检查对象的"终结条件"

25.如果对象在某个特定的范围内必须被清理(而不是作为垃圾被回收),请使用以下方法:先初始化对象,如果成功的话,立刻进入一个带有

finally子句的try块,在finally子句中进行清理动作

26.在继承的时候如果覆盖了finalize()方法,要记得调用super.finalize()

27.当你编写固定大小的对象容器时,它们要能够被传送给一个数组

28.优先选择接口而不是抽象类

29.为了避免十分令人泄气的经历,请检查类路径,确保所有未放进包里的类的名称互不相同

30.注意无尽的重载错误

31.当心过早优化

32.记住,代码被阅读的时间多于它被编写的时间