枚举
擅用枚举代替int和String
可以在枚举中定义一个抽象方法,要求每个主体中实现(必须实现),如:
public enum Operation{
PLUS{double apply(double x,double y){return x+y;}},
MINUS{double apply(double x,double y){return x-y;}};
abstract double apply(double x,double y);
}
Operation.valueOf("PLUS") = PLUS
Operation.valueOf("PLUS").ordinal() = 0
避免使用序数 序数就是ordinal返回的数,应该用下面这种实例域代替序数:
public enum Color{
RED(1),
GREEN(2);
private int i;
Color(int i){
this.i = i;
}
int getI(){
return this.i;
}
}
代码中的1,2就是实例域。
注解
针对只有在抛出异常时才成功的测试的注解:@ExceptionTest(Exception.class)
@ExceptionTest{NullPointerException.class,IndexOutOfBoundsException.class}
为避免方法被重载,保留Override注解
方法
先检查参数的有效性
在公有方法的JavaDoc中写明哪些情况可能抛出哪些异常
在检查参数时,该抛出的异常就throw出去
非公有方法通常使用断言(assert)检查参数:
assert a!=null;
针对一个JavaBean中的某一个成员变量,要注意他本身是不是可变的,如果是,要考虑进行保护性拷贝:
见:P159
通常使用Date.getTime()返回的long基本类型作为内部的时间表示法。
尽量不要提供两个参数数目相同的重载方法
返回零长度的数组或者集合,而不是null
Collections.emptyList()
方法可以返回一个预定义不可变空列表
异常
只针对异常情况才使用异常
不要使用异常来控制流。
对于可以恢复的异常使用受检异常(非运行时异常),对于编程错误使用运行时异常
过分使用受检异常会是程序变得难于使用