Java编码规范
一、编码规范概述
二、文件体系结构规则
1、文件体系规则
(1)java文件目录结构
<模块分类目录>
action:存放action(控制层\controller)、dao:存放dao(数据层)、form:存放展示层文件、service:存放业务逻辑文件、vo:存放数据对象文件
- Model:model是数据模型,例如与数据库的某个表相关联
- mappers:一般都是JavaBean对象,映射到各表对应的sql增删改查语句,以及表数据结构映射resultMap
- dao:对数据模型的增删改查的执行操作方法
- impl:继承services具体得到实现类、定义的接口
- controller:将定义的接口包装处理,提供给前端调用的api
2、源文件结构规则
(1)包和引入语句
(2)类/接口
(3)类变量的声明顺序:public、protected、package、private
(4)变量、常量的注释应在上方或右方
(5)用递增的方式写构造器,参数多的写在后面
(6)类变量的存取方法get/set
(7)如果定义main()方法,必须写在类底部
三、文件命名规则
统一命名规则,对同一package中的文件命名一般以包名为后缀,service层:例如IUserService和UserServiceImpl
四、排版规则
1、左括号和后一个字符之间不存在空格,右括号和前一个字符会逐渐不存在空格
2、强制转换后跟一个空格
3、单行不超过80个字符,断行原则:逗号后、操作符前、较高层次断行、断行时行对齐、第一次断行缩进4个字符
五、注释规则
1、类方法注释:使用JavaDoc,写出每个参数和返回值的意义;当修改其他组员创建的类时,增加@author标签
2、代码块注释、单行/多行注释等等
3、Java代码中需要文档化的部分
(1)参数:类型,用于做什么,相关约束、限制或前置条件,复杂情况需要包含一个示例以说明
(2)变量:描述说明,复杂情况需要包含一个示例以说明
(3)类:类说明(作者、时间、功能、目的等),已知的bug,开发/维护历史
(4)接口:接口说明、使用方法
(5)局部变量:用法/目的
(6)方法内部注释:方法内部变量说明、复杂逻辑部分的代码注释
(7)方法:做什么以及为什么这样做,传入参数说明,返回说明,已知的bugs,方法抛出的异常说明,代码更新的历史记录,调用方法,前置条件/后置条件说明
六、命名规则
1、包命名规则:包的名字全部小写<根目录>.<一级目录>.<二级目录>.<三级目录>
2、类命名规则:
(1)使用英文名称
(2)类名是名词,采用大小写混合的方式,首字母大写 驼峰命名
(3)类命不要用复数
(4)不要以A、An、The开头
(5)若不能选择适当的类名,可把紧密相关的数据库表名作为类名
(6)使用完整单词,避免缩写词
3、接口命名规则:与类相同,名字前加 I
4、方法命名规则:动词+名词对,采用大小写混合的方式,第一个单词首字母小写;准确描述方法功能
5、变量命名规则:
(1)采用大小写混合
(2)除一次性混合变量以外,不能用单个字符的变量名
(3)如果变量名代表容器,后加List
6、常量:类常量全部用大写字母,单词间用下划线隔开
7、方法参数命名规则:全英文,首字母小写后续单词首字母大写
8、数组命名规则:将[ ]放在类型后
9、Boolean getter方法命名规则:is作为前缀 isString( )
10、Getter/Setter方法命名规则:以get/set为前缀
11、构造方法命名:使用类名
12、异常命名规则:异常类名以Exception结尾,异常实例名使用e命名
七、变量
1、变量规范:一行声明一个变量
2、提供对实例以及类变量的get和set方法
3、不要在一个语句中给多个变量赋相同的值
4、不要将赋值运算符用在容易混淆得到地方
5、局部变量不要和公共变量同名
6、声明变量的同时对变量进行初始化
八、方法
1、用注释详细说明每个参数的作用、取值范围及参数间得到关系
九、可读性
1、用括号明确表示出表达式的优先级,避免使用默认优先级
2、避免使用不易理解的数字,用有意义的标识来替代
3、源程序中关系较为紧密的代码应尽可能相邻
4、不使用难懂的技巧性很高的语句
5、不要在for循环的表达式里使用3个以上变量
十、程序效率
1、不要在循环内执行重复操作
2、对字符串有附加操作时,使用StringBuffer而非String
StringBuffer用作字符串拼接等附加操作的效率比String高出几个数量级
3、显式的把不再被引用的对象赋值为null
4、不要频繁的初始化对象,除非必要,否则不要再循环内初始化对象
十一、质量保证
1、质量保证规则
(1)打开的数据库连接、文件,在使用后在finally中关闭
(2)合理设计程序,避免占用太大内存
2、安全规则
(1)不使用不推荐的API:deprecated标记,最好不使用
(2)不滥用goto语句
(3)系统具有一定的容错能力
(4)常量与变量比较,常量在左边
(5)字符串:null的注意事项
使用eqlals()方法比较内容是否相同;使用StringUtils.isEmpty()判断null与"";使用StringUtils.isBlank()判断null、“”,“ ”
(6)不能处理的异常,往外层抛出,解决问题比界面友好更重要