编码规范指的是本身这么写没什么问题,但不建议这么写。
1.代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。
//错误示例
String _name,__name,$name,name_,name$;
为啥呢,因为这俩符号本身没啥意义。
另外其实$符号在js中应用是比较多的,_在Python中的应用是比较多的。不同的语言是有不同的理念的,但在Java中,这俩符号你写在前面或者后面是没啥意义的。
当然,当你定义常量的时候是可以用在中间的。
拓展:
数字键盘上的~是表示“位非”操作,运算符,啥意思呢,就是首先将当前变量转换成二进制,然后所有位取反 比如原本是1,位非操作后就变成0,原本是0,位非操作后就是1。
int a=10;
System.out.println(~a);
输出结果:
符号 | 描述 |
~ | 运算符 为非运算,上面说了 |
! | 运算符 布尔类型的非 |
@ | 注解使用,这不用多说了 |
# | 在注释中 使用#+方法名,可以跳转到该方法 |
% | 取模运算 |
^ | 异或运算 相同为0,不同为1 |
& | 与运算符 有1为1,全0为0 |
* | 乘号 |
( | 左括号 |
) | 右括号号 |
= | 等于号 |
2.所有编程相关的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,纯拼音命名的方式更要避免采用。
//正确示例 ali,alibaba,taobao,hangzhou;
//错误示例 DaZhePromotion[打折], getPingFenName()[评分] String fw[福娃] int 数量=3
避免使用任何带有种族歧视性的词语。
//正确示例 日本人 印度人 非洲人 blockList allowList secondary
//错误示例 RIBENGUIZI ASAN HEIGUI blackList whiteList slave
4.类名使用UpperCamelCase风格(首字母大写驼峰命名法),但一下情况除外:DO、BO、DTO、VO、AO、PO、UID等。
//正例:ForceCode UserDO HtmlDTO XmlService TcpUdpDeal TaPromotion
//反例:forcecode UserDo HTMLDto XMLService TCPUDPDeal TAPromotion
5.方法名、参数名、成员变量、局部变量统一使用lowerCamelCase(首字母小写的驼峰命名)风格。
//正例:localValue getHttpMessage() inputUserId
6.常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。
//正例:MAX_STOCK_COUNT CACHE_EXPIRED_TIME
//反例:MAX_COUNT EXPIRED_TIME
7.抽象类命名使用Abstract开头;异常类命名使用Exception结尾;测试类命名要以他测试类的名字+Test结尾。
拓展:
有些说法说抽象类也可以用Base开头,但我不建议这么做,因为有些包里面,Base开头的是基础类而不是抽象类,用Base容易混淆。
8.类型与中括号紧挨相连来表示数组。
//正例 String[] strArray = {};
//反例 String dataArray[] = {};
9.POJO类中的任何布尔型变量,都不要加is前缀,否则部分框架解析会引起序列化错误。
啥意思的,我们来看一下代码,
我们新建一个Student类型,里面有一个boolean类型的isDeleted属性,当我们生成get()方法时,生成的是isDeleted();
package com.alicodestandard.bean;
/**
* @ClassName Student
* @Author wangshuo
* @Date 15:16 2022/6/30
* @Description TODO
**/
public class Student {
private boolean isDeleted;
public boolean isDeleted() {
return isDeleted;
}
public void setDeleted(boolean deleted) {
isDeleted = deleted;
}
}
如果将idDeleted属性换为deleted,生成get方法的时候,也会生成isDeleted();
package com.alicodestandard.bean;
/**
* @ClassName Student
* @Author wangshuo
* @Date 15:16 2022/6/30
* @Description TODO
**/
public class Student {
private boolean deleted;
public boolean isDeleted() {
return deleted;
}
public void setDeleted(boolean deleted) {
this.deleted = deleted;
}
}
所以当有些框架序列化时,发现isDeleted()的get方法,会误以为是有一个deleted属性,所以当你属性值为isDeleted时,会产生序列化问题。
10.包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词,包名统一使用单数形式,但类名如果有复数含义,类名可以使用复数形式。
11.避免在子父类的成员变量之间、或者不同代码块的局部变量之间采用完全相同的命名,使可理解性降低。
12.杜绝完全不规范的缩写,避免望文不知义。
//反例:AbstractClass缩写为absClass(我™还以为是“防抱死类“嘞)
// condition缩写为condi;function缩写为fu,此种随意缩写严重影响了代码的可阅读性