命名不能以下划线或美元进行开始和结尾
//反面教材
private String _name;
private Integer $Object;
private boolean name_;
private BigDecimal Object$;
禁止使用拼音和英文的并用,禁止直接使用拼音和中文(知名的拼音等同于英文)
//反面教材
private String DaZhePromotion;//[打折]
//正面教材
private String taobao;
需要使用驼峰样式的命名
1).类名,MarcoPolo,但是类名的开头必须为大写
2).方法名
3).参数名
4).成员变量
5).局部变量
常量全部大写,单词之间用下划线隔开
//正面教材
private String MAX_STOCK_COUNT;
DTO,POJO,JO类中布尔型的成员变量不要以is开头
说明:定义为基本数据类型Boolean isDeleted的属性,它的方法也是isDeleted(),RPC框架在反向解析的时候,“以为”对应的属性名称是 deleted,导致属性获取不到,进而抛出异常。
数组定义时,中括号放置在类型后面,禁止放置在变量名后面
//正面教材
String[] params = new String[5];
对于使用了设计模式的类在命名时要体现
//正面教材
class OrderFactory:工厂模式
class LoginProy:代理模式
class ResourceObserver:观察者模式
对于long长整型的定义禁止使用l,要使用L
//反面教材
private longa = 2l;//像这样的定义在一定程度上会与数字21混淆
类内部定义方法的顺序(推荐)
公有方法或保护方法 > 私有方法 > getter/setter 方法
说明:公有方法是类的调用者和维护者最关心的方法,首屏展示最好;保护方法虽然只是子类
关心,也可能是“模板设计模式”下的核心方法;而私有方法外部一般不需要特别关心,是一个
黑盒实现;因为方法信息价值较低,所有Service和DAO的getter/setter方法放在类体最
后。
接口的名字要以Impl结尾
如InterfaceMethodNameStyleImpl
接口的名字也可以如此命名:以I(大写的i)开头,以Service结尾,如IUserService
接口中的方法和属性不要加任何的修饰符
//反面教材
public void f();
public String xxx = "hello world";
//正面教材
void update();
Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals
所有的相同类型的包装类对象之间值的比较,全部使用equals方法比较
说明:对于Integer var= ?在-128至127范围内的赋值,Integer对象是在IntegerCache.cache产生,会复用已有对象,这个区间内的Integer值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用equals方法进行判断。
循环体内,字符串的连接方式,使用StringBuilder的append方法进行扩展。
说明:反编译出的字节码文件显示每次循环都会new出一个StringBuilder对象,然后进行append操作,最后通过toString方法返回String对象,造成内存资源浪费。
类成员与方法访问控制从严
1)如果不允许外部直接通过new来创建对象,那么构造方法必须是private。2)工具类不允许有public或default构造方法。
3)类非static成员变量并且与子类共享,必须是protected。
4)类非static成员变量并且仅在本类使用,必须是private。
5)类static成员变量如果仅在本类使用,必须是private。
6)若是static成员变量,必须考虑是否为final。
7)类成员方法只供类内部调用,必须是private。
8)类成员方法只对继承类公开,那么限制为protected。
说明:任何类、方法、参数、变量,严控访问范围。过于宽泛的访问范围,不利于模块解耦。
思考:如果是一个private的方法,想删除就删除,可是一个public的service方法,或者
一个public的成员变量,删除一下,不得手心冒点汗吗?变量像自己的小孩,尽量在自己的
视线内,变量作用域太大,如果无限制的到处跑,那么你会担心的。