1、一定要保证数据私有
这是最重要的,绝对不要破坏封装性。当数据保持私有时,它们的表示形式的变化不会对类的使用者产生影响,即使出现bug也易于检测。
2、一定要对数据初始化
java不对局部变量进行初始化,但是会对对象的实例域进行初始化。最好不要依赖于系统的默认值,而是应该显式地初始化所有的数据,具体的初始化方式可以是提供默认值,也可以是在构造器总设置默认值。
3、不要在类中使用过多的基本类型
就是说,用其他的类代替多个相关的基本类型的使用。这样会使类更加易于理解且易于修改。例如,可以用一个称为Address的新类替换一个Customer类中以下的实例域:
private String street;
private String city;
private String state;
private int zip;
这样,可以很容易处理地址的变化,例如,需要增加对国际地址的处理。
4、不是所有的域都需要独立的域访问器和域更改器
在对象中,常常包含一些不希望别人获得或设置的实例域。例如在Address类中,存放州缩写的数组。
5、将职责过多的类进行分解
虽然究竟多少算“过多”每个人看法不同,但是,如果明显地可以将一个复杂的类分解成两个更为简单的类,就应该将其分解。
6、类名和方法名要能够体现它们的职责
与变量应该有一个能够反映其含义的名字一样,类也应该如此。
命名类名的良好习惯是采用一个名词(Order)、前面有形容词修饰的名词(RushOrder)或动名词修饰名词(BillingAddress)。对于方法来说,习惯是访问器方法用小写get开头(getSalary)、更改其方法用小写的set开头(setSalary)。
7、优先使用不可变的类
例如LocalDate类以及java.time包中的其他类是不可变的---没有方法能修改对象的状态。类似plusDays的方法并不是更改对象,而是返回状态已修改的新对象。
更改对象的问题在于,如果多个线程试图同时更新一个对象,就会发生并发更改。其结果是不可预料的。如果类是不可变的,就可以安全地在多个线程间共享其对象。