设计
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.记住,代码被阅读的时间多于它被编写的时间