Java编码规范
1.标识符命名规范
/**
* 类命名使用驼峰式MarcoPolo,见样例【1】。
*/
// 样例【1】,用户类命名规则
UserController、UserService、UserServiceImpl
/**
* 方法名命名规范
* 1)获取单个对象使用get作为前缀,见样例【2】。
* 2)获取多个对象使用list作为前缀,见样例【3】。
* 3)获取统计数据使用count作为前缀,见样例【4】。
* 4)插入数据使用install作为前缀,见样例【5】。
* 5)修改数据使用update作为前缀,见样例【6】。
* 6)删除数据使用delete作为前缀,见样例【7】。
* ps:方法命名使用小驼峰英文命名,禁止出现中文拼音。批量操作使用batchXXX开头。
*/
// 样例【2】,根据用户id查询单个用户数据
public User getUserByUserId(Long userId);
// 样例【3】,根据用户对象查询用户列表数据
public List<User> listUserByUser(User user);
// 样例【4】,根据用户部门统计用户总数
public T countUserByDeptId(String deptId);
// 样例【5】,新增用户数据
public int installUser(User user);
// 样例【6】,修改用户数据
public int updateUser(User user);
// 样例【7】,根据用户id删除用户数据
public int deleteUserByUserId(Long userId);
/**
* 变量与常量命名规范
* 1.变量名使用小驼峰命名,并且使用英文,禁止出现中文拼音,见样例【8】。
* 2.常量名使用全大写命名,并且使用英文,禁止出现中文拼音,见样例【9】。
* ps:boolean类型,变量不要用is开头。
*/
// 样例【8】,变量命名规则,字符串、对象、数字
String userId = "";
User userInfo = new UserInfo();
int userAge = 0;
// 样例【9】,常量命名规则,系统文件上传路径
private final String SYSTEM_FILE_UPLOAD_URL = "/home/upload";
2. 代码格式
/**
* 1.缩进:程序块要采用缩进风格编写,缩进只使用TAB键,不能使用空格键;
* 方法体的开始、类的定义、以及if、for、do、while、switch、case语句中的代码都要采用缩进方式;
*
* 2.对齐:程序块的分界符左大括号"{" 和右大括号"}"都另起一行,应各独占一行并且位于同一列,
* 同时与引用它们的语句左对齐;对齐只使用TAB键,不使用空格键;不允许把多个短语句写在一行中,
* 即一行只写一条语句;if、for、do、while、case、switch、default等语句自占一行,见样例【10】.
*
* 3.换行:一行的长度超过80个字符需要换行,见样例【11】。
*
* 4.间隔:类、方法及相对独立的程序块之间、变量说明之后必须加空行;关键字之后要留空格,见样例【12】。
*
*/
// 样例【10】,对其方案
// 错误的样例
if (useAge > 18) youngMan = false;
String[] strings = new String[]{"文字1", "文字2", "文字3"};
for (String str : strings) System.out.println(StringUtils.isNotEmpty(str));
// 正确的样例
if (useAge > 18)
{
youngMan = false;
}
String[] strings = new String[]{"文字1", "文字2", "文字3"};
for (String str : strings)
{
System.out.println(StringUtils.isNotEmpty(str));
}
// 样例【11】,换行方案
// 错误的样例
String[] strings = new String[]{"文字1", "文字2", "文字3"};
List<String> stringsNew = Arrays.stream(strings).distinct().map(item -> return strings + "+").filter(item -> item.length() > 10).collect(Collectors.toList());
// 正确的样例
List<String> stringsNew = Arrays.stream(strings)
.distinct()
.map(item -> strings + "+")
.filter(item -> item.length() > 10)
.collect(Collectors.toList());
// 样例【12】,间隔方案
// 错误的样例
if(userAge>18){
youngMan = false;
}else{
youngMan = true;
}
for(int i=0;i<=10;i++){
userAge++;
}
// 正确的样例
if (userAge > 18)
{
youngMan = false;
}
else
{
youngMan = true;
}
for (int i=0; i<=10; i++)
{
userAge++;
}
3.注释
1、基本注释(必须加)
(a) 类(接口)的注释。
(b) 构造函数的注释。
(c) 方法的注释。
(d) 全局变量的注释。
2、特殊必加注释(必须加)
(a) 典型算法必须有注释。
(b) 在代码不明晰处必须有注释。
(c) 在代码修改处加上修改标识的注释。
(d) 在循环和逻辑分支组成的代码中加注释。
(e) 为他人提供的接口必须加详细注释。
4.常用工具类
/**
* 通用工具类一般存放在,caiwei-common包的util下
*/
// 工具类【1】,【BeanUtils】Bean 工具类,常用于对象拷贝。
BeanUtils.copyBeanProp(目标对象,源对象);
// 工具类【2】,【file】文件处理工具类,包含文件增删改、图片处理、文件上传。
FileUtils、ImageUtils、FileUploadUtils
// 工具类【3】,【html】通用html工具封装,一般为系统放Xss拦截使用。
// 工具类【4】,【http】通用http发送方法,包含通用Get、Post发送方法。
// 发送Post请求
HttpResponse response = HttpUtils.doPost("请求地址", "请求接口", "请求方式", "请求header", "请求参数", bodys);
System.out.println(response.toString());
// 发送Get请求
String rspStr = HttpUtils.sendGet("请求地址", "请求参数(xx=1&xx=2)", "编码类型(Constants.GBK)");
// 工具类【5】,【ip】IpUtils可用于获取用户ip地址、AddressUtils根据用户ip地址获取地址。
// 获取用户ip地址
IpUtils.getIpAddr(request);
// 根据用户ip地址,获取地址
AddressUtils.getRealAddressByIP(ip);
// 工具类【6】,【Excel】Excel文档处理可读、写文档。
// 导出Excel
ExcelUtil<实体> util = new ExcelUtil<实体>(实体.class);
return util.exportExcel(列表数据, "文件名");
// 工具类【7】,【sign】加密方法,包含Base64加解密与解密。
// 加密
Base64.encode
// 解密
Base64.decodeStr
// 工具类【8】,【spring】方便在非spring管理环境中获取bean。
// 获取当前的用户
LoginUser loginUser = SpringUtils.getBean(TokenService.class).getLoginUser(ServletUtils.getRequest());
// 工具类【9】,【uuid】包含两个id生成工具类。
IdUtils.randomUUID();
UUID.randomUUID();
// 工具类【10】,【AesUtil】用于用户登录加密与解密。
AesUtil.encrypt("要加密的数据","加密key","加密iv");
AesUtil.desEncrypt("要解密的数据","解密key","解密iv");
// 工具类【11】,【DateUtils】包含一些常用的时间处理方法。
// 获取当前时间
DateUtils.getNowDate();
// 格式化时间
DateUtils.parseDateToStr("格式化类型","时间");
// 工具类【12】,【DictUtils】系统字典操作的工具类。
DictUtils.getDictCache("字典key");
// 工具类【13】,【JDBCUtils】数据库链接工具类。