玩物得志Java笔试题_代码规范利器-CheckStyle

本期内容分为五个部分,阅读时长预估7分钟:

使用背景

CheckStyle使用意义

CheckStyle安装与使用

CheckStyle检查配置示例

落地使用情况及效果

使用背景

玩物得志目前还处在一个狂奔业务的时期,开发一般都全力支撑业务的快速奔跑,没有太多的时间专门优化代码或者说没有一个编码规范约束开发同学写的代码,导致早期很多业务代码的可读性及可维护性比较差。

随着团队人员规模的增大,不断有新人加入及每个人的编码经验、代码习惯风格不同,很难靠口头讲来规范团队的代码规范。

能否有一个工具从一开始写代码就要求开发人员遵守编码规范?

编写整洁优雅的代码,减轻CodeReview工作量,减少后续不断重构糟糕冗余的代码,自动化代码规范的检查过程?

它就是CheckStyle!

什么是CheckStyle

简单的说就是帮助Java程序员编写符合代码规范的工具。

它支持高度可配置的各种检查规则,进行自动化的检查,不符合代码规范的地方会有红色波浪线提醒,鼠标箭头移上去会有相应的提示,简单易用!

编码常见的问题

CheckStyle支持100多项代码检查规则,下面整理了我们平时编写代码中常见的不规范问题如下:

Import语句(无用的导入,多余导入使用'.*')

嵌套层数太多,可读性、可维护性太差(if嵌套层数过多,try catch嵌套层数过多)

魔术数字

命名不规范(Static变量名\常量名\参数名\方法名\包名\类名\接口名)

方法、类行数太多导致可读、可维护性太差

方法参数个数过多

方法分支复杂度、圈复杂度过多

类或接口声明部分顺序没按照Java语言编码规则

空catch块,if else语句没有使用大括号等

编码细节问题:如检查是否在long类型定义了大写的L,字母小写l和数字1很相似

c7353dd9db6a782891de4c341e36bd1e.png

CheckStyle使用意义

遵从共同的编码规范,编写出易于阅读和维护的代码,减少Bug产生的可能性

自动化代码规范的检查过程,提升代码质量,减轻CodeReview工作量,提升研发效能

形成团队整体良好的编码习惯,减少后续因糟糕冗余代码导致的不断重构的工作量,提升研发效能

c7353dd9db6a782891de4c341e36bd1e.png

CheckStyle安装与使用

CheckStyle插件安装

点击Preferences,搜索框里搜索plugins,点击Plugins,搜索CheckStyle找到CheckStyle-IDEA插件,安装并启用

b88127561b6268645e6aab1eea8690bb.png

IDEA CheckStyle插件生效

点击Preferences,搜索框里搜索Inspections,点击Inspections,搜索CheckStyle找到CheckStyle勾选上,建议右下角的Severity配置成Error级别

12636586d94bfb751b02db6dbc11805e.png

CheckStyle配置文件

通过下方途径下载CheckStyle配置文件,CheckStyle的检查有error、warn、info三种级别

公众号内回复【checkstyle】获取配置文件

copy到应用包的目录下

d6eaedad781210d78dacc0f199b82e82.png

添加CheckStyle配置文件

点击Preferences,搜索框里搜索CheckStyle,按如下步骤添加配置文件

9f0a8d336a8cb2ebea5a06062a502048.png

1474e562d9f490f3a29e82c7c82f442f.png

运行查看执行效果

支持当前文件、整个工程及分支增量更改文件的checkStyle检查,检查效果如下:

a04966898304d75ec83acff6b90c20cc.png

Checkstyle引入到maven构建中

为什么使用maven的checkstyle插件,主要可以约束打的包符合代码规范。

如果代码不规范连包都打不起来,因为插件配置到了maven的生命周期里(一开始可能不符合规范的代码很多,如果来不及全部改完建议暂时先注释掉引入的checkstyle插件来打包,后续修改完再去掉注释)

主 Pom包中引入 maven-checkstyle-plugin

org.apache.maven.pluginsmaven-checkstyle-plugin3.0.0packagechecktruetrueUTF-8wwdz-checkstyle.xmlcom.puppycrawl.toolscheckstyle8.0

执行命令:

mvn checkstyle:checkstyle

执行检查结果:

cc7cb6b05d6dbe5f1278bb512ecb3cdc.png

CheckStyle引入注意的问题

检查工程中返回给前端或者客户端使用的VO类中的变量,如果不符合驼峰命名规范,扫描出来不能直接更改,因为这些变量前端做展示使用,需要前端和客户端兼容更改。建议先使用 //cs:off //cs:on 忽略校验,后续杜绝此类问题的产生

提供Http请求的传参命名不符合驼峰命名规范,扫描出来不能直接更改,需要客户端或前端做兼容更改。建议先使用//cs:off //cs:on 忽略校验(如下图所示),后续杜绝此类问题的产生

bc7b35c6b78da515f13533f061db798a.png

提供Http请求的传参个数过多,不能直接更改,需要调用的客户端或前端兼容更改。建议先使用//cs:off //cs:on 忽略校验,后续杜绝此类问题的产生

一开始引入CheckStyle可能不符合规范的改动点很多,可以针对增量修改、新增文件做CheckStyle,本地代码在commit之前可以针对这次提交的增量代码进行CheckStyle检查

(其实在编写代码的时候有不符合规范的也会实时红色波浪线提醒,鼠标移动上去就有相应的提示!)

ffec3e39273cd06f364edbfce9168b35.png

c7353dd9db6a782891de4c341e36bd1e.png 

CheckStyle检查配置示例

CheckStyle的所有检查项见官方文档:https://checkstyle.sourceforge.io/checks.html,下面针对应用中常见的CheckStyle检查不通过的做下说明:

嵌套层数

try catch嵌套层数

默认是一层,可根据实际配置(建议不超过两层),嵌套层数越多可读性越差,后续不便于代码维护

if嵌套层数

默认是一层,可根据实际配置(建议不超过两层),if 嵌套层数越多可读性就越差,后续不便于代码维护

如下代码中的多层嵌套,可通过if return 编码方式减少if嵌套层数

a4844100c07c4f1025a1e64474eaceca.png

Import语句

必须导入类的完整路径,即不能使用*导入所需的类

检查结果

08ead71464b94155978d656672a16ec1.png

检查是否导入不必显示导入的类

检查是否导入的类没有使用

检查结果

4ebd507f0543517df575c8417e3bff44.png

复杂度

魔术数字

代码中最常见的问题,改为使用常量定义替代

5f4251465d6bf14d532264b9e9a10381.png

命名不规范

常量命名规范配置

在编写代码过程中如果不符合常量命名规范有如下提示:

0b25f8f1f8e511399f8d43d34664056f.png

方法名命名规范配置

参数命名规范配置

方法参数个数

局部变量名规范

局部变量不规范提示:

ede779298a51be3a9693f270851317f9.png

成员变量

不规范提示:

0f97bc23a039df254b014040549db8ca.png

UpperEll

代码行数限制

如下限制方法行数不能超过60行,类行数不能超过1200行,一个文件的行数不能超过1500行

行数过多提示如下:

08849994da30592960ed71bcc068eab1.png

方法参数限制

声明顺序检查

根据Java编程语言的编码规约,一个类或接口的声明部分应当按照以下顺序出现:

类(静态)变量:首先应当是public类变量,然后是protected类变量,再次是package类变量(没有访问标识符),最后是private类变量

实例变量:首先应当是public类变量,然后是protected类变量,再次是package类变量(没有访问标识符),最后是private类变量

构造器

方法

例如下图中静态属性定义顺序错误的提示

908d845b2845a229667c50de15a3d3fb.png

空catch块

异常catch,要做些error日志关键信息打印返回错误对象或者抛异常,检查不符合此规范的示例如下:

e63afa9fd953e136a71d9bc394f6a233.png

if else 花括号检查

60c6c03866bf2fd6b07f338bc1066a2c.png

c7353dd9db6a782891de4c341e36bd1e.png

落地使用情况及效果

目前CheckStyle已在用户、订单、商家、社区、支付等多个组落地使用。作者所在用户组经过一周CheckStyle检查不通过的历史代码修改优化,及新提交的CodeReview代码前必须经过CheckStyle检查,组内代码整洁度及可读性有了很明显的提升,CodeReview的工作量也比之前减轻了很多。

有了CheckStyle这个代码规范利器,组内研发效能和代码质量又有了进一步的提升!

点击

“阅读原文”查看更多精彩

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/327742.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Json交互处理

Json交互处理 JSON简介 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,目前使用特别广泛。采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写&#xff0…

利用 async amp; await 的异步编程

一、异步编程的简介 通过使用异步编程,你可以避免性能瓶颈并增强应用程序的总体响应能力。 Visual Studio 2012 引入了一个简化的方法,异步编程,在 .NET Framework 4.5 和 Windows 运行时利用异步支持。编译器可执行开发人员曾进行的高难度工…

xml配置文件显示为文本文件问题

idea 新建的xml文件显示为文本问题 原因: 由于新建不带后缀名的文件的时候 idea会相对智能的让你选择 文件规则 解决: settings->File types 中找到对应的文件类型显示 ,把 你不小心添加的 正则 给去除就好了, 我这里的配置如下图 可以自己进行设置(&…

.NET应用迁移到.NET Core--调查案例

上周已经发过三篇文章讲述做.NET 应用迁移到.NET Core的一般方法,具体内容请看: .NET应用迁移到.NET Core(一) .NET应用迁移到.NET Core(二)风险评估 .NET应用迁移到.NET Core(三)从…

Ajax前后端对接---Springmvc

Springmvc实现 实体类user Data AllArgsConstructor NoArgsConstructor public class User {private String name;private int age;private String sex;}我们来获取一个集合对象&#xff0c;展示到前端页面 RequestMapping("/a2") public List<User> ajax2(…

缓存在大型网站架构中的应用

缓存的基本知识 在整个计算机体系构造中&#xff08;无论是硬件层面还是软件层面&#xff09;&#xff0c;缓存都是无处不在的。 在计算机硬件构造中&#xff0c;由于两种介质的速度不匹配&#xff0c;高速介质在和低速介质交互时速度趋向低速方&#xff0c;这就导致了高速介质…

win10安装dockerx docker的常见命令 可以子腾讯云上做做练习

参考资料 https://www.jianshu.com/p/e8427d12b3e0 百度搜索 docker hub 可以查找 你需要的镜像 https://hub.docker.com/?utm_sourcegetting_started_guide&utm_mediumembedded_Windows&utm_campaignfind_whalesay https://blog.csdn.net/zzq060143/article/de…

Jexus 5.8.2 正式发布为Asp.Net Core进入生产环境提供平台支持

Jexus 是一款运行于 Linux 平台&#xff0c;以支持 ASP.NET、PHP 为特色的集高安全性和高性能为一体的 WEB 服务器和反向代理服务器。最新版 5.8.2 已经发布&#xff0c;有如下更新&#xff1a; 1&#xff0c;现在大部分网站已经部署HTTPS&#xff0c;大家对于安全越来越重视&…

php移动代码,移动专区周级收录如何提交 复制这段php代码即可

今天我们来讲解下“移动专区的周级提交”很多朋友都在使用移动专区(之前的熊掌号)进行提交&#xff0c;但是天级提交只给10个额度&#xff0c;需要我们不断提交10个才会有所增长&#xff0c;但是我们可以使用“周级提交”可以直接享受5万的数据提交&#xff0c;对于我们站点的收…

搭建高可用的rabbitmq集群 + Mirror Queue + 使用C#驱动连接

我们知道rabbitmq是一个专业的MQ产品&#xff0c;而且它也是一个严格遵守AMQP协议的玩意&#xff0c;但是要想骚&#xff0c;一定需要拿出高可用的东西出来&#xff0c;这不本篇就跟大家说 一下cluster的概念&#xff0c;rabbitmq是erlang写的一个成品&#xff0c;所以知道如何…

Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)

<?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace"houseDao" ><result…

手机钉钉在进行视频会议时怎么录屏

https://www.iefans.net/info/v1037168.html 钉钉在进行视频会议时怎么录屏 编辑&#xff1a;秩名2020-03-24 10:14:52 钉钉 类型&#xff1a;效率办公 语言&#xff1a;简体中文 安卓下载 扫一扫下载游戏 钉钉是一款很好用的学习办公软件&#xff0c;它的工呢很多&#xf…

Vue3学习(后端开发)

目录 一、安装Node.js 二、创建Vue3工程 三、用VSCode打开 四、源代码目录src 五、入门案例——手写src 六、测试案例 七、ref和reactive的区别 一、安装Node.js 下载20.10.0 LTS版本 https://nodejs.org/en 使用node命令检验安装是否成功 node 二、创建Vue3工程 在…

微软Ignite大会约起来

今年的微软Ignite技术大会今天开始了&#xff0c;要好好学习哦&#xff0c;提供直播地址&#xff0c;通过阅读原文链接可以直达直播地址 http://soft.zdnet.com.cn/special/microsoft_ignite_2016。 大会亮点 创新 IT 技术飞速发展促发了更多行业创新&#xff0c;因此您和您的企…

aria2c rpc php,aria2c 的基本配置,附带傻瓜式源码

经常需要配置&#xff0c;但是 每次都需要查找配置项的意义&#xff0c;所以索性写在这里&#xff0c;以便有个记录&#xff0c;下次无需查找。aria2c -d/Users/blueboz/Downloads \-c \-D \-laria.log \-j5 -k1M \-x16 -s16 \--file-allocationnone \--enable-rpc \--load-coo…

最全Windows下搭建go语言开发环境以及开发IDE

https://www.cnblogs.com/ynhmonster/p/8335797.html GO语言开发环境的搭建---Windows环境下 1、Golang下载 我是通过Golang中国下载的&#xff0c;因为去官网下载十分慢&#xff0c;甚至没有进度条。 下载地址&#xff1a; https://www.golangtc.com/download 我选择的是go1…

外媒:微信小程序顺应“APP中启动APP”的行业潮流

BI中文站 11月30日报道 上周&#xff0c;中国网络巨头腾讯的高级副总裁张小龙对外披露了一些照片&#xff0c;显示聊天工具微信开始整合“小程序”。这一功能可以让微信的用户在无需下载软件的基础上&#xff0c;使用各种互联网应用服务&#xff0c;极大扩展微信的功能。 据外媒…

SpringMVC(笔记)

MVC简介 普通的web项目每次都要进行手动的把jar包导进去&#xff0c;否则会报500&#xff0c;class not found [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VstjHhuz-1609824493673)(C:\Users\王东梁\AppData\Roaming\Typora\typora-user-images…

php 去掉url中的index.php,php 去掉url中的index.php

php去掉url中的index.php的方法&#xff1a;首先打开相应的代码文件&#xff1b;然后将if代码块嵌套在server代码块中&#xff1b;最后重启nginx服务器即可。本文操作环境&#xff1a;nginx1.0.4系统、PHP7.1版&#xff0c;DELL G3电脑nginx服务器去掉url中的index.php将if代码…

在ASP.NET Core中使用百度在线编辑器UEditor

0x00 起因 最近需要一个在线编辑器&#xff0c;之前听人说过百度的UEditor不错&#xff0c;去官网下了一个。不过服务端只有ASP.NET版的&#xff0c;如果是为了能尽快使用&#xff0c;只要把ASP.NET版的服务端作为应用部署在IIS上就可以立即使用了。不过我的需求并不急&#xf…