• Java编码规范--命名风格


            编码规范指的是本身这么写没什么问题,但不建议这么写。

     

    1.代码中的命名均不能下划线或美元符号开始,也不能下划线或美元符号结束。

    1. //错误示例
    2. String _name,__name,$name,name_,name$;

            为啥呢,因为这俩符号本身没啥意义。

            另外其实$符号在js中应用是比较多的,_在Python中的应用是比较多的。不同的语言是有不同的理念的,但在Java中,这俩符号你写在前面或者后面是没啥意义的。

            当然,当你定义常量的时候是可以用在中间的。

            拓展:

    数字键盘上的~是表示“位非”操作,运算符,啥意思呢,就是首先将当前变量转换成二进制,然后所有位取反 比如原本是1,位非操作后就变成0,原本是0,位非操作后就是1。

    1. int a=10;
    2. System.out.println(~a);

    输出结果:

    符号描述
    ~运算符 为非运算,上面说了
    !      运算符 布尔类型的非
    @       注解使用,这不用多说了
    #在注释中 使用#+方法名,可以跳转到该方法
    %       取模运算
    ^异或运算 相同为0,不同为1
    &与运算符 有1为1,全0为0
    *乘号
    (左括号
    )右括号号
    =等于号

    2.所有编程相关的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。

            说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,纯拼音命名的方式更要避免采用。

    1. //正确示例 ali,alibaba,taobao,hangzhou;
    2. //错误示例 DaZhePromotion[打折], getPingFenName()[评分] String fw[福娃] int 数量=3

     3.代码和注释中都要避免使用任何带有种族歧视性的词语。

    1. //正确示例 日本人 印度人 非洲人 blockList allowList secondary
    2. //错误示例 RIBENGUIZI ASAN HEIGUI blackList whiteList slave

    4.类名使用UpperCamelCase风格(首字母大写驼峰命名法),但一下情况除外:DO、BO、DTO、VO、AO、PO、UID等。

    1. //正例:ForceCode UserDO HtmlDTO XmlService TcpUdpDeal TaPromotion
    2. //反例:forcecode UserDo HTMLDto XMLService TCPUDPDeal TAPromotion

    5.方法名、参数名、成员变量、局部变量统一使用lowerCamelCase(首字母小写的驼峰命名)风格。

    //正例:localValue getHttpMessage() inputUserId

    6.常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长

    1. //正例:MAX_STOCK_COUNT CACHE_EXPIRED_TIME
    2. //反例:MAX_COUNT EXPIRED_TIME

    7.抽象类命名使用Abstract开头;异常类命名使用Exception结尾;测试类命名要以他测试类的名字+Test结尾。

            拓展:

            有些说法说抽象类也可以用Base开头,但我不建议这么做,因为有些包里面,Base开头的是基础类而不是抽象类,用Base容易混淆。

    中场休息:

    8.类型与中括号紧挨相连来表示数组。

    1. //正例 String[] strArray = {};
    2. //反例 String dataArray[] = {};

    9.POJO类中的任何布尔型变量,都不要加is前缀,否则部分框架解析会引起序列化错误。 

            啥意思的,我们来看一下代码,

            我们新建一个Student类型,里面有一个boolean类型的isDeleted属性,当我们生成get()方法时,生成的是isDeleted();

    1. package com.alicodestandard.bean;
    2. /**
    3. * @ClassName Student
    4. * @Author wangshuo
    5. * @Date 15:16 2022/6/30
    6. * @Description TODO
    7. **/
    8. public class Student {
    9. private boolean isDeleted;
    10. public boolean isDeleted() {
    11. return isDeleted;
    12. }
    13. public void setDeleted(boolean deleted) {
    14. isDeleted = deleted;
    15. }
    16. }

            如果将idDeleted属性换为deleted,生成get方法的时候,也会生成isDeleted();

    1. package com.alicodestandard.bean;
    2. /**
    3. * @ClassName Student
    4. * @Author wangshuo
    5. * @Date 15:16 2022/6/30
    6. * @Description TODO
    7. **/
    8. public class Student {
    9. private boolean deleted;
    10. public boolean isDeleted() {
    11. return deleted;
    12. }
    13. public void setDeleted(boolean deleted) {
    14. this.deleted = deleted;
    15. }
    16. }

            所以当有些框架序列化时,发现isDeleted()的get方法,会误以为是有一个deleted属性,所以当你属性值为isDeleted时,会产生序列化问题。

    10.包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词,包名统一使用单数形式,但类名如果有复数含义,类名可以使用复数形式。

    11.避免在子父类的成员变量之间、或者不同代码块的局部变量之间采用完全相同的命名,使可理解性降低。

    12.杜绝完全不规范的缩写,避免望文不知义。

    1. //反例:AbstractClass缩写为absClass(我™还以为是“防抱死类“嘞)
    2. // condition缩写为condi;function缩写为fu,此种随意缩写严重影响了代码的可阅读性
  • 相关阅读:
    大数据Flink简介与架构剖析并搭建基础运行环境
    spring security 使用示例
    微信打开https网址会被拦截,无域名
    JAVA面试题之恒生电子
    XGB(有监督学习)和多维时序模型结合——预测风电出力
    持续性能优化:确保应用保持高性能
    如何让CI/CD同一个阶段的任务先后执行而不是同时执行
    C++ 就地构造对象
    vue-3
    损失函数——机器学习
  • 原文地址:https://blog.csdn.net/m0_38084879/article/details/125517850