日常工作中需要注意的Java编码规范

经常听到‘编码风格’这个词,那么什么是编码风格呢?接手项目后,读项目中其他人的代码 你就能感觉到不同编码风格。有的人写的代码很乱,可读性很差,方法逻辑处理耦合度很高,缩进不规范。有的人编码风格很好,代码缩进对齐看起来很规范,注释清晰。这就是编码风格的不同。

一个成熟的公司都会有自己具体的编码要求,像大家熟知的《阿里巴巴Java开发手册》等。有些规范不是强制性要求,但是平时编写代码的过程中稍微一注意,代码的可读性就会提高,这样也会显得你很专业。最近正好在修改项目sonar代码扫描出的一些问题,也顺便把自己早期写的一些方法进行了重构,结合自己实际编码经验,把开发过程中可能需要注意的一些编码规范记录下来,方便回顾督促自己养成良好的编码风格。

命名风格

  1. 类名约定俗成用UpperCamelCase 风格,遵从驼峰形式,特殊专有名词等除外,如:VIP、BO等。
    例子: FlightConnectVo / FlightInfoVo / ConverterUtil
  2. 方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,遵从 驼峰形式。
    例子: flightService / flightInfo / signDao FlightInfoVo flightInfo = new FlightInfoVo()
  3. 常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,名字不要过长。
    例子: private static fianl String ERROR_CODE = "0"
  4. 枚举类名建议带上 Enum 后缀,常量类名建议加上Constants后缀 见名知意。
    例子: SigningEnum / SystemContants

编码规范

  1. 一个java文件代码行数建议限制在1500行内。
  2. 一个方法逻辑代码行数建议限制在80行内,单行字符数限制不超过 120 个,超出需要换行(IEDA中120个字符处有一条竖着的分界线)。
  3. 基本数据类型与包装数据类型的使用标准:所有的 POJO 类属性必须使用包装数据类型。 所有的局部变量使用基本数据类型。
  4. 集合初始化时,指定集合初始值大小。如果暂时无法确定初始值大小,设置为 16,动态扩容。
    例子: HashMap<String,Object> tempMap = new HashMap<>(16)
  5. 在 if/else/for/while/do 语句中必须使用大括号。即使只有一行代码,避免使用 单行的形式:if (condition) statements;
  6. 除常用方法(如 getXxx/isXxx)等外,不要在条件判断中执行其它复杂的语句,将复 杂逻辑判断的结果赋值给一个有意义的布尔变量名,以提高可读性。 (将判断语句抽出来赋值给一个boolean变量)。
  7. 推荐使用@Slf4j注解来记录日志。
  8. try-catch 捕获异常 推荐捕获具体的异常如IOException等,Exception,RuntimeException 一般是不被允许的。catch语句中一般不进行逻辑处理,会进行日志记录。
  9. 重复多次使用的代码考虑抽取出来作为公共方法,多次使用的字符串应当抽出来作为常量。一般情况下魔法值在代码中是不被允许的。
  10. 字符串的拼加操作,使用StringBuilder。

注释规约

java中有三种注释方式:
①//… 单行注释
②//多行注释(注释内容不会写入javadoc生成的文档中)
③/**…/多行注释(注释内容会写入javadoc生成的文档中)

  1. 类、类属性、类方法的注释必须使用 Javadoc 规范,使用/*内容/格式,不得使用 //xxx 方式。
    import java.io.Serializable;
    /**
     * @ClassName: Student
     * @Description: 学生类
     * @Author: GaoXiaoQiu
     * @Date: 2020-04-03 17:11
     * @Version: 1.0
     **/
    public class Student implements Serializable {
        private static final long serialVersionUID = 1999114234471963897L;
        /**
         * 姓名
         */
        private String name;
        /**
         * 年龄
         */
        private Integer age;
    }
    
  2. 所有的类都必须添加创建者和创建日期
  3. 方法内部单行注释,在被注释语句上方另起一行,使用//注释。方法内部多行注释 使用/* */注释,注意与代码对齐
  4. 所有的枚举类型字段必须要有注释,说明每个数据项的用途。
  5. 代码修改的同时,注释也要进行相应的修改,尤其是参数、返回值、异常、核心逻辑 等的修改。并且及时删除无用的注释和代码。

其他相关

  1. 一个方法的复杂度不应该过高,if else while 等不应过多,一般限制在是十个以内。
  2. 通常一个方法的 return 限制在三个以内。
  3. 使用工具类等来简化代码,一些工具类的方法可以减少代码量,提高代码的可读性。
    例子: BeanUtils.copyProperties(XXX,XXX); CollectionUtils.isEmpty(list)
  4. 使用一些java8语法简化代码。
 //初始进港段List
 List<FlightConnectVo> inFlight = connectFlightVo.getList().stream().filter(
 		v>inFlag.equals(v.getInOrOut())).collect(Collectors.toList());
  1. IDEA可以配合一些插件来实时监测代码 如Alibaba Java Coding Guidelines。

SonarQube 简介

SonarQube(sonar)是一个开源平台,用于管理源代码的质量。 SonarQube不只是一个质量数据报告工具,更是代码质量管理平台。 支持java, C#, C/C++, PL/SQL, Cobol, JavaScrip, Groovy 等等二十几种编程语言的代码质量管理与检测。 SonarQube可以从以下七个维度检测代码质量,而作为开发人员至少需要处理前5种代码质量问题。

  1. 不遵循代码标准
    SonarQube可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规范代码编写。
  2. 潜在的缺陷
    SonarQube可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具检 测出潜在的缺陷。
  3. 糟糕的复杂度分布
    文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员 难以理解它们, 且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试。
  4. 重复
    显然程序中包含大量复制粘贴的代码是质量低下的,SonarQube可以展示 源码中重复严重的地方。
  5. 注释不足或者过多
    没有注释将使代码可读性变差,特别是当不可避免地出现人员变动时,程序的可读性将大幅下降 而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷。
  6. 缺乏单元测试
    SonarQube可以很方便地统计并展示单元测试覆盖率。
  7. 糟糕的设计
    通过SonarQube可以找出循环,展示包与包、类与类之间的相互依赖关系,可以检测自定义的架构规则 通过SonarQube可以管理第三方的jar包,可以利用LCOM4检测单个任务规则的应用情况, 检测耦合。

良好的编码风格不是一下就能形成的,只要在日常编码过程中多注意这些规范,习惯成自然,逐渐就会形成自己的编码风格。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
华为代码规范,适用 C/C++ 1 概述 ................................................................................................................................................................... 5 1.1 编写目的 ........................................................................................................................................... 5 1.2 文档约定 ........................................................................................................................................... 5 1.3 预期的读者和阅读建议 ................................................................................................................... 5 1.4 参考文献 ........................................................................................................................................... 5 2 排版要求 ........................................................................................................................................................... 5 2.1 程序块缩进 ....................................................................................................................................... 5 2.2 程序块之间空行 ............................................................................................................................... 5 2.3 长语句和长表达式 ........................................................................................................................... 6 2.4 循环、判断等长表达式或语句 ....................................................................................................... 7 2.5 长参数 ............................................................................................................................................... 7 2.6 短语句 ............................................................................................................................................... 8 2.7 条件、循环语句 ............................................................................................................................... 8 2.8 语句对齐 ........................................................................................................................................... 8 2.9 函数、过程和结构等语句块 ........................................................................................................... 9 2.10 程序块分界符 ................................................................................................................................... 9 2.11 操作符前后空格 ............................................................................................................................. 10 2.12 其他 ..................................................................................................................................................11 3 注释 ..................................................................................................................................................................11 3.1 有效注释量 ......................................................................................................................................11 3.2 公司标识 ..........................................................................................................................................11 3.3 说明性文件 ..................................................................................................................................... 12 3.4 源文件头 ......................................................................................................................................... 13 3.5 函数头部说明 ................................................................................................................................. 13 3.6 注释与代码一致 ............................................................................................................................. 14 3.7 注释内容 ......................................................................................................................................... 14 3.8 注释缩写 ......................................................................................................................................... 14 3.9 注释位置 ......................................................................................................................................... 14 3.10 变量、常量注释 ............................................................................................................................. 15 3.11 数据结构的注释 ............................................................................................................................. 15 3.12 全局变量 ......................................................................................................................................... 16 3.13 注释缩排 ......................................................................................................................................... 16 3.14 注释与代码之间空行 ..................................................................................................................... 17 3.15 变量定义、分支语句 ..................................................................................................................... 17 3.16 其他 ................................................................................................................................................. 19 4 标识符命名 ..................................................................................................................................................... 20 4.1 命名清晰 ......................................................................................................................................... 20 4.2 特殊命名需注释 ............................................................................................................................. 21 4.3 命名风格保持一致 ......................................................................................................................... 21 4.4 变量命名 ......................................................................................................................................... 21 4.5 命名规范与系统风格一致 ............................................................................................................. 22 4.6 其他 ................................................................................................................................................. 22 5 可读性 ............................................................................................................................................................. 23 5.1 运算符优先级 ................................................................................................................................. 23 第 3 页 共 69 页 5.2 避免直接使用数字作为标识符 ..................................................................................................... 24 5.3 其他 ................................................................................................................................................. 24 6 变量、结构 ..................................................................................................................................................... 25 6.1 公共变量 ......................................................................................................................................... 25 6.2 公共变量说明 ................................................................................................................................. 26 6.3 公共变量访问说明 ......................................................................................................................... 26 6.4 公共变量赋值 ................................................................................................................................. 26 6.5 防止局部变量与公共变量同名。 ................................................................................................. 26 6.6 严禁使用未经初始化的变量作为右值。 ...................................................................................... 26 6.7 其他 ................................................................................................................................................. 27 7 函数、过程 ..................................................................................................................................................... 34 7.1 对所调用函数的错误返回码要仔细、全面地处理。 .................................................................. 34 7.2 明确函数功能,精确(而不是近似)地实现函数设计。 .......................................................... 34 7.3 局部变量 ......................................................................................................................................... 34 7.4 全局变量 ......................................................................................................................................... 34 7.5 接口函数参数 ................................................................................................................................. 35 7.6 其他 ................................................................................................................................................. 35 8 可测性 ............................................................................................................................................................. 44 8.1 调测开关 ......................................................................................................................................... 44 8.2 打印信息 ......................................................................................................................................... 45 8.3 单元测试 ......................................................................................................................................... 45 8.4 集成测试 ......................................................................................................................................... 45 8.5 断言使用 ......................................................................................................................................... 45 8.6 设置与取消有关测试手段时,不能影响软件功能功能 .............................................................. 48 8.7 版本维护 ......................................................................................................................................... 48 8.8 其他 ................................................................................................................................................. 48 9 程序效率 ......................................................................................................................................................... 50 9.1 编程时要经常注意代码的效率。 ................................................................................................. 50 9.2 提高代码效率 ................................................................................................................................. 50 9.3 全局效率高于局部效率 ................................................................................................................. 51 9.4 提高代码空间效率 ......................................................................................................................... 51 9.5 循环体内工作量最小化 ................................................................................................................. 52 9.6 其他 ................................................................................................................................................. 53 10 质量保证 ................................................................................................................................................. 56 10.1 在软件设计过程构筑软件质量。.............................................................................................. 56 10.2 代码质量保证优先原则 ................................................................................................................. 56 10.3 只引用属于自己的存贮空间。 ..................................................................................................... 56 10.4 防止引用已经释放的内存空间。 ................................................................................................. 56 10.5 内存及时释放 ................................................................................................................................. 57 10.6 文件句柄及时关闭 ......................................................................................................................... 57 10.7 防止内存操作越界 ......................................................................................................................... 58 10.8 认真处理程序所能遇到的各种出错情况 ...................................................................................... 59 10.9 初始化变量 ..................................................................................................................................... 59 10.10 数据一致性检查 ............................................................................................................................. 59 10.11 严禁随意更改其它模块或系统的有关设置和配置 ...................................................................... 59 10.12 不能随意改变与其它模块的接口 ................................................................................................. 59 第 4 页 共 69 页 10.13 系统接口 ......................................................................................................................................... 59 10.14 编程时,要防止差 1 错误 ............................................................................................................. 61 10.15 操作符检查 ..................................................................................................................................... 61 10.16 分支语句写完整 ............................................................................................................................. 62 10.17 使用 return 语句 .............................................................................................................................. 62 10.18 不要滥用 goto 语句 ........................................................................................................................ 62 10.19 其他 ................................................................................................................................................. 62 11 代码编辑、编译、审查 ......................................................................................................................... 65 11.1 打开编译器的所有告警开关对程序进行编译 .............................................................................. 65 11.2 在产品软件(项目组),要统一编译开关选项 ...................................................................... 65 11.3 通过代码走读及审查方式对代码进行检查。 .............................................................................. 65 11.4 测试部测试产品之前,应对代码进行抽查及评审 ...................................................................... 65 11.5 其他 ................................................................................................................................................. 65 12 代码测试、维护 ..................................................................................................................................... 67 12.1 单元测试要求至少达到语句覆盖 ................................................................................................. 67 12.2 单元测试开始要跟踪每一条语句,并观察数据流及变量的变化 .............................................. 67 12.3 清理、整理或优化后的代码要经过审查及测试。 ...................................................................... 67 12.4 代码版本升级要经过严格测试 ..................................................................................................... 67 12.5 使用工具软件对代码版本进行维护.............................................................................................. 67 12.6 正式版本上软件的任何修改都应有详细的文档记录 .................................................................. 67 12.7 其他 ................................................................................................................................................. 67 13 宏 ............................................................................................................................................................. 68 13.1 用宏定义表达式时,要使用完备的括号 ...................................................................................... 68 13.2 将宏所定义的多条表达式放在大括号 ...................................................................................... 68 13.3 使用宏时,不允许参数发生变化 ................................................................................................. 69
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值