0.编程应该尽可能简单,以同样的方式实施同样的过程,不断积累惯用法,将其标准化。
1.考虑用静态工厂方法代替构造器,即getInstance()、newInstance()、valueOf() 等。
2.当类的构造器或者静态工厂中具有多个参数时,请选择Builder模式设计此类。
3.实现Singleton,除了用静态工厂方法+私有构造器外,还有一种更好的方法,即:单无素的枚举类型。
4.避免创建不必要的对象,要优先使用基本类型而不是装箱基本类型,要当心无意识的自动装箱。
5.当你应该重用现有对象的时候,请不要创建新的对象。
6.消除过期的对象引用,警惕在数组、缓存、监听器或其它回调中发生内存泄漏问题。
7.避免使用终结方法,不应该依赖终结方法来更新重要的持久状态,使用终结方法有一个非常严重的性能损失。
8.覆盖equals时请遵守通用约定,一旦违反了equals约定,当其他对象面对你的对象时,你完全不知道这些对象的行为会怎么样。
9.一个类型的任何重要属性也将适用于它的子类型,因此为该类型编写的任务方法,在它的子类型上也应该同样运行得很好。
10.始终要覆盖toString,提供好的toString实现可以使类用起来更加舒适。
11.谨慎地覆盖clone方法,考虑提供一个拷贝构造器或拷贝工厂代替clone方法。
12.永远不要让客户去做任何类库能够替客户完成的事情。
13.设计一个类时,应当尽可能地使每个类或者成员不被外界访问。
14.在公有类中,不应该直接暴露数据域,而应使用访问方法。
15.使类的可变性最小化,如果类不能被做成不可变的,也应该尽可能地限制它的可变性。
16.复合优先于继承,与方法调用不同的是,继承打破了封装性,只有当子类真正是超类的子类型时,才适合用继承。
17.设计一个超类时,超类的构造器决不能调用可被覆盖的方法。
18.接口优于抽象类,现有类可以很容易被更新,以实现新的接口。
19.接口应该只被用来定义类型,它们不应该用来导出常量。
20.用函数对象表示策略,函数指针的主要用途就是实现策略模式,在Java中要声明一个接口表示该策略。
21.不要在新代码中使用原生态类型,如果使用原生态类型,就失掉了泛型在安全性和表述性方面的所有优势。
22.泛型列表优先于数组。
23.优先考虑泛型,优先考虑泛型方法。
24.请用enum代替int常量。
25.不要使用枚举的序数导出与它关联的值,应该要将它保存在一个枚举成员变量中。
26.请用EnumSet代替位域,用EnumMap代替序数索引。
27.虽然枚举类型不可扩展,但可以通过实现接口,对它进行模拟扩展。
本博文会长期,持续的更新~~~:)