果完全不兼容升级,避免反序列化混乱,那么请修改 serialVersionUID 值。
说明: 注意 serialVersionUID 不一致会抛出序列化运行时异常。
4.1111. 【强制】构造方法里面禁止加入任何业务逻辑,如果有初始化逻辑,请放在 init 方法中。
4.1212. 【强制】 POJO 类必须写 toString 方法。使用 IDE 的中工具: source> generate toString
时,如果继承了另一个 POJO 类,注意在前面加一下 super.toString。
说明: 在方法执行抛出异常时,可以直接调用 POJO 的 toString()方法打印其属性值,便于排
查问题。
4.1515. 【推荐】 类内方法定义顺序依次是:公有方法或保护方法 > 私有方法 > getter/setter
方法。
说明: 公有方法是类的调用者和维护者最关心的方法,首屏展示最好; 保护方法虽然只是子类
关心,也可能是“模板设计模式”下的核心方法; 而私有方法外部一般不需要特别关心,是一个
黑盒实现; 因为方法信息价值较低,所有 Service 和 DAO 的 getter/setter 方法放在类体最
后。
4.1616. 【推荐】 setter 方法中,参数名称与类成员变量名称一致, this.成员名=参数名。在
getter/setter 方法中,尽量不要增加业务逻辑,增加排查问题的难度。
反例:
public Integer getData(){
if(true) {
return data + 100;
} else {
return data - 100;
}
}
4.1717. 【推荐】循环体内,字符串的联接方式,使用 StringBuilder 的 append 方法进行扩展。
反例:
String str = "start";
for(int i=0; i<100; i++){
str = str + "hello";
}
说明: 反编译出的字节码文件显示每次循环都会 new 出一个 StringBuilder 对象,然后进行
append 操作,最后通过 toString 方法返回 String 对象,造成内存资源浪费。
4.1818. 【推荐】 final 可提高程序响应效率,声明成 final 的情况:
1) 不需要重新赋值的变量,包括类属性、局部变量。
2) 对象参数前加 final,表示不允许修改引用的指向。
3) 类方法确定不允许被重写。
4.1919. 【推荐】慎用 Object 的 clone 方法来拷贝对象。
说明: 对象的 clone 方法默认是浅拷贝,若想实现深拷贝需要重写 clone 方法实现属性对象
的拷贝。
4.2020. 【推荐】类成员与方法访问控制从严:
1) 如果不允许外部直接通过 new 来创建对象,那么构造方法必须
2) 工具类不允许有 public 或 default 构造方法。
3) 类非 static 成员变量并且与子类共享,必须是 protected。
4) 类非 static 成员变量并且仅在本类使用,必须是 private。
5) 类 static 成员变量如果仅在本类使用,必须是 private。
6) 若是 static 成员变量,必须考虑是否为 final。
7) 类成员方法只供类内部调用,必须是 private。
8) 类成员方法只对继承类公开,那么限制为 protected。
说明: 任何类、方法、参数、变量,严控访问范围。过宽泛的访问范
考:如果是一个 private 的方法,想删除就删除,可是一个 public
个 public 的成员变量,删除一下,不得手心冒点汗吗?变量像自己
线内,变量作用域太大,如果无限制的到处跑,那么你会担心的。