Java编码规范
一.操作规范
1.提交代码前必须格式化代码
Eclipse中配置的位置:
Window->Preferences->Java->Code Style ->code Templates
Window->Preferences->Java->Code style->Formatter
2.代码提交
为了防止冲突,提交前,先从SVN中更新代码和配置文件,如果发生冲突,先看历史说明,在确认,提交之前,eclipse如果有warning,必须修复
二.日志规范
1.日志输出
代码禁止以System及Throwable.printStackTrace的方式输出日志信息,必须用Logger替代
2.错误日志
由于系统原因造成业务处理失败的事件,需要记录错误日志,非系统原因的业务处理失败,不应该记录错误日志
三.注释规范
对于一个完整的类,应该包括版权注释,类的说明注释,类的成员变量注释,以及public,protected,private方法的注释(setter,getter,接口的实现方法除外)保持代码和注释的一致性。
四.异常处理
捕捉到的异常,至少要记入日志,或者重新抛出,最外层的业务使用者,必须处理异常,将其转化为用户可以理解的内容。
五.安全规范
1.web安全
对于前台的web页面,必须加上表单重复提交功能,对于业务关键字段需要加上放篡改的功能,否则可能造成业务重复执行或者被客户端恶意篡改,对于前台页面,严禁出现方便调试后台的页面。
2.敏感信息保护
用户的敏感信息包括密码,短信验证码,身份证号,银行密匙,不能泄露,可能会导致信息泄露的方式有Logger,URL,get参数。
六.通用规范
1.配置信息的使用
避免将UserID,URL,文件名,系统等开关参数编码
2.资源的使用
对于系统资源的访问,使用后必须释放系统资源,这类资源包括:文件流,线程,网络连接,数据库链接等。对于文件,流IO操作,必须通过finally关闭,对于线程,必须由线程池提供,对于网络连接与数据库连接,必须由框架通过连接池提供。
七.类的编写规范
- 所有包,类,接口,方法,属性,参数均使用英文单词命名,所有单词第一个字母大写,其它字母小写。除了第一个单词,所有单词第一个字母大写,其他字母小写。
- 命名包,类,接口,方法变量时,尽量贴近问题的领域
- 修改源代码时,尽量保持与所修改系统的编码格式风格保持一致
- 所有包名必须使用com.[company].project.[project name]
八.格式规范 - 包的导入应该按照相关性进行分组
- 只导入明确需要的类,只需要看导入列表,就可以知道该类依赖哪些类
- 类和接口元素的布局顺序
- 类和接口的文档描述
- 类和接口的声明
- 类的静态变量,按照public,protected,package,private
- 实例变量,按照public,protected,package,private顺序
- 类的方法,无固定顺序
- 类的声明,基类和实现的接口应该独立执行,保持可读性。
- 方法修饰关键词定义的顺序
<public, protected, private > static abstract synchronized
unuaual final native methodName - 变量声明,不要在一行声明多个变量
- 保证明确的类型转换,不要默认进行隐式类型转换
intValue = (int) floadValue; //避免 intValue = floatValue - 数组指示符紧跟类型变量
int[] a = new int[20]; // 避免: int a[] = new int[20] - 仅仅循环控制变量才能出现在for()循环中
sum = 0;
for (i = 0; i < 100; i++) {
sum += value[i];
}
//避免:
for (i = 0, sum = 0; i < 100; i++){
sum += value[i];
} - 循环变量应该靠近循环体初始化
isDone = false while(!isDone){
…
}
//避免
isDone = false;
…
…
while(!isDone){
…
} - 避免长的布尔表达式,应该换成多个更容易理解的表达式
- 不要再条件语句中执行方法,以提高可读性
- 代码缩进,应该使用4个空格为一单位进行缩进
- 条件语句的主要形式,即使单条语句,也要使用括号
If(conditions){
Statements;
}
If(conditions){
Statements;
}else{
Statements;
} else{
Statements;
} - 空循环也要使用完整的{}块
- Switch语句的使用格式
Switch(condition){
Case ABC:
Statements;
//做注释
Case DEF:
Statements;
Break;
Default:
Statements;
Break;
} - try-catch使用格式
try{
statements;
}
Catch(Exception exception){
Statements;
} - 空格的使用
- 运算符两边应该各有一个空格
- Java保留字后面应跟随一个空格
- 逗号后面跟随一个空格
- 冒号两个应各有一个空格
- 分号后面跟随一个空格
- 紧密相关的代码块应该用一空行分开
- 为了保证可读性,变量名应该左对齐
- 对if语句中的条件进行折行时,应该使折行的条件语句相对主功能语句在缩进4个空格,突出主要功能语句。
九.命名规范
1.一般命名规则 - 包名应该使用小写字母,不要出现下划线等
- 所有类名命名首字母大写命名,使用名词组合
- 使用名词组合或形容词去命名一个接口,接口能提供一个对象提供的服务,也描述了一个对象的能力,所以用able,或iable作为后缀
- 变量名和参数名使用驼峰表示形式
- 对于常量名,使用大写字母,并使用下划线做间隔
- 方法名应该使用动词开头
- 缩写字母应该保持首字母大写
- 变量名应该和类型名称一致
2.特殊命名规则 - 使用get/set对类属性进行访问
- 使用is前缀表示一个布尔变量和方法
- 在查询时应该使用find作为前缀
- 使用initialize作为对象初始化方法的前缀
- 对于对象集合,变量名应该使用复数
- 对于抽象类,应该使用Abstract前缀
- 对于表示编号的变量,应使用NO后缀
- 异常应该使用Exception作为后缀
十.注释规范
所有的源文件都应该在开头有一个注释,其中列出类名、版本信息、日期和版权声明:
/*
- Classname
- Version information
- Date
- Copyright notice
*/