命名规范
1.类名(含接口名)是一个名词,采用大小写混合的方式,每个单词的首字母大写,尽量使类名简洁而富于描述。类名使用完整单词,避免缩写,除非该缩写词广泛使用,如URL、DAO、VO等
2.类名中建议体现类的类型或功能分类,建议接口命名使用I开头或者Interface结尾,抽象类命名使用Abstract或者Base开头,异常类命名使用Exception结尾,测试类以Test结尾,如果使用到了设计模式建议在类名中体现
3.方法名(除构造函数外)采用动词,大小写混合,第一个单词首字母小写,其后单词首字母大写
格式规范
1.关键字出现顺序:public,protected,private,abstract,final,transient,volatile,synchronized,native,strctfp
2.缩进采用四个空格,不使用tab字符
3.使用空行将逻辑相关的代码分隔开
下列情况应该总是使用两个空行:
(1)一个源文件的两个片段之间;
(2)类声明和接口声明之间;
下列情况应该总是使用一个空行:
(1)两个方法之间;
(2)方法内的局部变量和方法的第一条与句之间;
(3)块注释或单行注释之前;
(4)一个方法内的两个逻辑段之间;
注释规范
1.类、接口、方法、属性声明之前增加文档注释 (/* * …* /) ,其中类注释主要描述该类的主要功能和用途,方法注释主要描述该方法做了什么工作而不是怎么实现的
2.在注释中使用TODO来表示某些待实现的内容,使用XXX来标识某些待商榷的但可以工作的内容,用FIXME来表示某些错误、不能正常工作的但无法立即修复的内容。上述特殊注释标记应该注明标记人以及标记时间、处理时间
常量规范
1.禁止在长整型常量后出现小写的l,应该使用大写的L代替
2.如果可以使用Enum,就代替掉String常量以及int常量,因为这些常量通常不具备类型安全性,而且这些常量是编译时常量,如果该常量值发生变化,程序依旧能够继续运行,不过其行为可能已经不准确
正例:
public enum Apple{
FUJI,PIPPIN,GRANNY_SMITH
}
反例:
public staitc final int APPLE_FUJI = 0;
public staitc final int APPLE_PIPPIN= 1;
public staitc final int APPLE_GRANNY_SMITH= 2;
控制语句
1.每个switch语句都应该包含default分支且应该最后出现,每个case要么通过break或return等来终止,要么通过注释说明程序将继续执行到哪一个case为止
2.避免在循环中重复执行无需重复执行的相同内容,避免不必要的开销
正例:
void method(Vector vector){
int size = vector.size();
String pattern = getPattern();
for(int i = 0; i < size; i++){
// do
}
}
反例:
void method(Vector vector){
for(int i = 0; i < vector.size(); i++){
String pattern = getPattern();
}
}
3.慎用非短路逻辑运算符,因为它可能会造成空指针等异常情况。如下列情况,非短路逻辑运算符 & 左右两侧的表达式都会被计算,当字符串为null时右侧表达式将会出现空指针异常,但使用短路运算符 && 则不会出现如上情况。
正例:
if((s != null) && s.equals(...))
反例:
if((s != null) & s.equals(...))
面向对象
1.覆盖了equals方法,请务必覆盖hashCode方法。在Obj