JAVA 编码规范
目录
二、 命名规范 4
-
特殊符号命名 4
-
禁止拼音/中文命名 4
-
包(PACKAGE)命名规范 5
-
类命名规范 5
-
普通类命名规范 6
-
接口类命名规范 6
-
实现类命名规范 6
-
抽象类命名规范 6
-
异常类命名规则 6
-
测试类命名规则 6
-
-
方法命名规范 6
-
变量命名规范 6
-
常量命名规范 6
-
数组类型定义规范 7
-
XML 文件命名规范 7
-
杜绝完全不规范的缩写 7
三、 命名规则 7
-
接口 API 命名规则 8
-
PO 命名规则 8
-
VO 命名规则 8
-
控制类 CONTROLLER 命名规则 8
-
服务层 SERVICE 命名规则 8
-
持久层命名规则 8
-
组件命名规则 9
四、 编码格式规范 9
-
缩进排版 9
-
单行代码长度 9
-
代码换行规范 9
五、 IMPORT 导包规范 10
一、 工作空间编码要求
项目中的所有文件编码方式无特殊情况均需要采用 UTF-8 编码形式,包括 JAVA、XML、JSP、properties、HTML、JavaScript、CSS 等文件。下面以idea 作为范例进行配置,eclipse等其它 IDE 请自行查找相关资料并按要求配置好。
工作空间配置
设置步骤:File->Settings->Editor->File Encodings
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N9L1lrPf-1646102755283)(media/image1.png)]{width=“5.925694444444445in” height=“4.025in”}
文件编码方式配置
设置步骤:File->Other Settings->Default Settings ->Editor->File Encodings,设置方式如下图所示,无other Settings则不用设置:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g515bU3O-1646102755284)(media/image2.png)]{width=“6.009027777777778in” height=“5.951388888888889in”}
- 命名规范
2.1 特殊符号命名
代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。
反例:_name、__name、$Object、name_、name$、Object$
2.2 禁止拼音/中文命名
代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。正确的
英文拼写和语法可以让阅读者易于理解,避免歧义。当然,像 beijing、shanghai、youku、
taobao 等国际通用的名称,可视同英文。
2.3 包(package)命名规范
com.lpv.<use_type>
即:公司域名 + 使用类型
com.lpv:为公司固定域名,无特殊规定不可进行更改。
<use_type>:使用类型,例如:controller、mapper、service、util 等
常用的<use_type>如下表所示:
序号 类型名 含义
1 controller --控制层 package
2 service --服务层接口类 package
3 service.impl --服务层接口实现类 package
4 mapper --MyBatis持久层package
5 bean --所有的实体 package
6 bean.po --Persistant Object 持久化对象 package
7 bean.vo --View Object 视图对象 package(用于展示层,作用是把某个指定页面或组件的所有数据封装起来)
9 constant --常量类存放 package
10 component --所有封装组件存放 package
11 component.xxx --单个封装组件存放 package,其中 xxx 指组件的具体英文名称。
12 util --工具类 package
13 base --基础类 package
14 filter --自定义过滤器 package
15 exception --自定义异常类 package
16 interceptor --自定义拦截器 package
2.4 类命名规范
2.4.1 普通类命名规范
类名是个一名词,采用大小写混合的大骆驼峰方式,每个单词的首字母大写。尽量使你
的类名简洁而富有᧿述力。使用完整单词,避免缩写词(除非该缩写词被更广泛使用,像URL,
HTML)。
例如:class MD5、class UserContorller、class DateUtil。
2.4.2 接口类命名规范
命名规则遵照普通类命名规则。
例如:interface UserService、interface UserMapper。
2.4.3 实现类命名规范
实现类名称与接口名称相同。但为了区分接口与实现类,必须在实现类后增加字符串JAVA 编码规范
“Impl”。
例如:class UserServiceImpl。
2.4.4 抽象类命名规范
抽象类命名使用 Abstract 或 Base 开头。
2.4.5 异常类命名规则
异常类命名使用 Exception 结尾
2.4.6 测试类命名规则
测试类命名以它要测试的类的名称开始,以 Test 结尾。
2.5 方法命名规范
方法名是一个动词,采用大小写混合的方式,第一个单词的首字母小写,其后单词的首
字母大写。
例如:run()、runFast()、getBackground()、login()、checkExist()、updatePassword()。
2.6 变量命名规范
采用大小写混合的方式,第一个单词的首字母小写,其后单词的首字母大写。变量名不
应以下划线或美元符号开头,尽管这在语法上是允许的。
变量名应简短且富于描述。变量名的选用应该易于记忆,即,能够指出其用途。尽量避
免单个字符的变量名,除非是一次性的临时变量。临时变量通常被取名为 i,j,k,m 和 n
它们一般用于整型;c,d,e,它们一般用于字符型。
例如:char c、int i、float myWidth、String userName。
2.7 常量命名规范
常量应该全部大写,单词间用下划线隔开。
例如:
public static final int MIN_WIDTH = 4;
public static final String COMPANY_NAME = “Lpv”;
2.8 数组类型定义规范
中括号是数组类型的一部分,规范的数组定义如下:String[] args。
反例:使用 String args[]的方式来定义。
2.9 XML 文件命名规范
XML 文件命名与应用模块/功能命名规则一致,但是系统功能名全部小写,遵循第一个
单词的首字母小写,以后每个单词的首字母大写的原则。如果交易名称无法准确表达页面含
义,则自行调整。
2.10杜绝完全不规范的缩写
命名尽量使用完整的英文单词命名,不建议随意的缩写。采用缩写的文件、方法命名反
而会大大降低代码的可阅读性。
反例:
AbstractClass"缩写"命名成 AbsClass
condition"缩写"命名成 condi
此类随意缩写严重降低了代码的可阅读性。
- 命名规则
3.1 接口 API 命名规则
API 命名规范统一遵照标准的 RESTful 风格(全小写字母),格式如下:
/api+/+系统名称+/+一级(模块)+/+二级(功能或二级模块)+/+三级(功能或三级模块)+…
其中"/api+/+系统名称"无需在代码中体现,会在系统部署配置时统一加上此部分的前缀。
常用的功能命名如下表:
范例(toms 为系统名称):
操作员登录:/api/toms/operator/login
根据操作员 ID 获取详情(通过 PathVariable 送参数):/api/toms/operator/detail/{operatorId}
校验操作员是否已存在:/api/toms/operator/exist/check
创建操作员:/api/toms/operator/create
操作员列表(含分页和多个关键字查询):/api/toms/operator/list
删除操作员:/api/toms/operator/delete
3.2 PO 命名规则
所有 Persistant Object 的命名需要与数据库表格名称保持对应。如果数据库表格名称包
含下划线,则使用大骆驼峰的风格来对应 PO 的命名。如果数据库表格增加了通用的前缀/后
缀,则 PO 的命名不应该包含表格通用的前缀/后缀。
例如:
表格名称 user → PO 名称 User
表格名称 llbt_user → PO 名称 User(不包含红色标记的通用前缀:llbt)
表格名称 user_tb → PO 名称 User(不包含红色标记的通用后缀:tb)
表格名称 printer_project → PO 名称 PrinterProject
3.3 VO 命名规则
View Object 视图对象一般包含接口请求的 Request VO 对象和接口响应 Response VO 对
象,命名规则需要与接口名称保持关联性(不含 API 部分)。
请求Request VO对象命名规则为:接口名转化为大骆驼峰格式+ReqVo(或者RequestVo)。
响应 Response VO 对象命名规则为:接口名转化为大骆驼峰格式+ResVo(或者
ResponseVo)。
具体使用缩写的 Req/Res 还是全单词 Request/Response,一个项目中应保持一致性,禁
止出现两种格式的命名方式。
例如:
用户登录接口名:/api/user/login
请求 Request VO 对象为:UserLoginReqVo/UserLoginRequestVo
响应 Response VO 对象为:UserLoginResVo/UserLoginResponseVo
3.4 控制类 Controller 命名规则
模块名+ Controller
例如:UserController、AccountController、CustomerController
3.5 服务层 Service 命名规则
接口类:模块名+Service
实现类:模块名+ServiceImpl
例如:
接口类:UserService、PrinterBrandService
实现类:UserServiceImpl、PrinterBrandServiceImpl
3.6 持久层命名规则
接口类:模块名+MapperImpl/DaoImpl
实现类:模块名+MapperImpl/DaoImpl
其中,Mapper 一般时是持久层使用 MyBatis 框架时的命名方式。
3.7 组件命名规则
组件名称+Component
例如:WebClientComponent、RedisComponent
- 编码格式规范
4.1 缩进排版
缩进统一使用采用 Tab 缩进即可,不使用空格来缩进,eclipse 等部分 IDE 默认的缩进方
式采用的就是 Tab 缩进,如果并非 Tab 缩进,则务必调整一下此格式。
4.2 单行代码长度
为了便于阅读,一行长度最好不要超过 120 个字符,超过部分需要换行,若方法过长,
应提炼出私有方法。
4.3 代码换行规范
当一个语句在一行显示不下时,按照如下规则来进行换行:
Ø 在一个逗号之后断开。
Ø 在一个操作符之后断开。
Ø 当有高低优先级区别的时候,选择保留高优先级的在一起。
Ø 新的一行与上一行同一级别的表达式对其。
Ø 如果以上规则导致你的代码混乱,就直接缩进 2 格或 1 个制表符。
以下是代码换行的一些例子:
public void doSomething(Object someParam1, Object someParam2,
Object someParam3, Object someParam4) {
if (“ad12fweadfadf” == “adfaaaf” || “adfag” == “adghg” ||
“ADQER” == “WERTW” || “adff” == “agag” || “adfaf” == “yujgkk”) {
}
int x = 123 + 234 + 2345 + 4562 + 1324 + 5341 + 1324 + 13413 - 134 - 14 -
134 - 512 - 13;
long l1 = 2134132454 + (321234132445l + 213414345 - 24413455) + 44134 *
24654736552l;
long l2 = 2134132454 + (321234132445l + 213414345 - 24413455) +
44134 * 24654736552l;
}
- import 导包规范
按需进行导包,禁止使用通配符星号(*)做一次性导包,这种情况很容易会引发导包
错误的问题。
正例:
import com.lpv.framework.base.BaseController;
import com.lpv.framework.util.DateUtil
反例:
import java.util.*;
import org.springframework.web.bind.annotation.*;
34132445l + 213414345 - 24413455) + 44134 *
24654736552l;
long l2 = 2134132454 + (321234132445l + 213414345 - 24413455) +
44134 * 24654736552l;
}
- import 导包规范
按需进行导包,禁止使用通配符星号(*)做一次性导包,这种情况很容易会引发导包
错误的问题。
正例:
import com.lpv.framework.base.BaseController;
import com.lpv.framework.util.DateUtil
反例:
import java.util.*;
import org.springframework.web.bind.annotation.*;