1.OOP重点规约
一.OOP重点规约
1.类中的静态变量或静态方法,直接用类名访问即可,不要去用类的对象访问(会增加成本)。
2.覆写方法要加@override
3.相同参数类型,相同业务含义,才可以使用Java的可变参数,避免使用Object。(尽量不用可变参数编程)
4.外部使用的接口,不要修改方法名,如果过时加上@Deprecated注解并且注释说用可用的新的方法名来代替
5.equals方法容易抛出空指针异常,使用Objects.equals(xxx,yyy)来代替
6.所有相同类型包装类对象之间值比较使用equals方法。
【Java的8大基本类型使用“==”比较都是值比较,Java的包装类使用“==”比较是对象之间的地址比较。对于Integer类型从-128到127在IntegerCache中已经缓存了不管创建多少个这个范围的Integer都是一个地址使用“==”是true,一旦超出这个范围再使用“==”比较就是两个不同对象了为false。所以包装类型值比较使用equals方法】
7.关于基本类型和包装类型的使用标准如下:
(1)所有的POJO类属性必须使用包装类型:如果不是包装类型可能会产生空指针异常,例如:当调用其他方法为属性的setter方法参数赋值时,如果参数为null,如果该属性是基本类型则报空指针异常,如果为包装类型不报错。
(2)RPC方法的返回值和参数必须使用包装类型:RPC方法为“远程过程调用”,就是别人需要调用你的方法获得返回值,返回类型和参数必须为包装类型
(3)所有局部变量使用基本类型
8.定义DO/DTO/VO等POJO类时,不要设置任何属性默认值
9.序列化的类新增加属性时,不要修改serialVersionUID字段,如果修改了会造成反序列化失败。如果想要不兼容老版本则可以修改serialVersionUID字段。
10.在循环体中,字符串连接方式需要使用StringBuilder的append方法进行拼接。不要使用String的+号拼接字符串,性能浪费。
String text = "Hello"; for(int i = 0 ; i < 100; i++){ text = text + "Hello"; //此处会先创建一个StringBuilder变量内容和text的内容一样,再进行拼接最后调用toString方法返回给text }
11.慎用Object的clone方法来拷贝对象。由于Object的clone方法为浅拷贝,需要深拷贝则需要重写clone方法。
【8中基本数据类型和String类型为不可变数据类型可以使用浅拷贝,其他都需要深拷贝】