概述

今天介绍的插件主要是围绕编码规范的。有追求的程序员,往往都有代码洁癖,要尽量减少代码的「坏味道」。

代码静态检查是有很多种类,例如圈复杂度、重复率等。业界提供了很多静态检查的插件来识别这些不合规的代码,帮助提高项目的质量。比较知名的一个产品是 SonarQube,它提供了一个「门禁」平台,集成了很多静态检查检查。下次有机会介绍一下该平台的搭建。

本文主要介绍 IDEA 中对于 Java 语言静态检查的好插件:

Alibaba Java Coding Guidelines

阿里巴巴 Java 编码指南插件支持。

首先说说阿里的 p3c 项目,它的 Github 主页地址是:https://github.com/alibaba/p3c 阿里之前开源过一份 Java 开发手册。手册从编程规约、异常日志、单元测试、MySQL 数据库、工程结构、设计规约等角度,介绍了阿里的 Java 开发规范,这个对于 Java 新手帮助挺大的,能够学到不少东西。有一些坑可能老司机也会翻车。

开发人员 Coding 时,可能就忘记规范了,写出来的代码还是会有『坏味道』。这时候Alibaba Java Coding Guidelines 插件就派上用场了。它会根据上面的 Java 开发规范对你的代码进行检查,不符合规范的代码会有提示,并给出修改建议。阿里作为国内 Java 大厂,基于成千上万的工程师总结出来的踩坑经验,我相信给出的规范建议还是比较可靠的。

上个栗子:

  String str = "hello";
for (int i = 0; i < 100; i++) {
str = str + "world!";
}

先不要往下看,试着分析一下这段代码哪里可以优化?

其实,插键扫描的结果不仅有这个问题,还有『魔法数字』的问题。插件的用法,见下面的截图。

除此以外,建议在 IDEA 进行代码提交时,勾选上它提供的检查项按钮,这样如果有不合规的代码进行提交,就会提醒你修改:

CheckStyle-IDEA

项目主页:https://github.com/jshiell/checkstyle-idea

安装好之后,进入设置,勾选上你要选用的默认检查规范:

大厂往往都有自己的语言规范,可以导入选用:

右键菜单,选择 Check Current File 即可检查当前文件是否符合编码规范:

检查结果:

如果不符合规范的写法有点多,整改起来就会很痛苦了,这时候该怎么办?有一个功能叫格式化代码(Reformat Code),快捷键是:

  • Mac:Command+Option+L
  • Win:Ctrl+Shift+L

如果想按照你指定的规则进行格式化,可以按照如下方式进行自定义:

FindBugs-IDEA

FindBugs 是一款老牌 Java 静态检查插件了。它的功能和阿里 p3c 那个插件很像,只不过它历史悠久、国际化一点。它同样的可以扫描代码,发现一些可能会引入 Bug 的代码段,给出参考建议。

启动 FindBugs 的方式,右键菜单中,Findbugs 提供了好几个选项:

  • Analyze Current File:检查当前文件
  • Analyze Class uner Cursor:检查光标处的类
  • Analyze Package Files:检查包文件
  • Analyze Modul Files:检查 Module 文件
  • Analyze Project Files:检查项目文件
  • Analyze Scope Files:检查指定范围内的文件
  • Analyze All Modified Files:检查所有修改过的文件
  • Analyze changelist files:检查变更列表中的文件

检查结果:

检查结果分为如下类别:

  • Bad practice:不好的做法,代码违反了公认的最佳实践标准;
  • Malicious code vulnerbility:恶意的代码漏洞;
  • Correctness:可能不正确,比如错误的强制类型转换;
  • Performance:潜在的性能问题;
  • Security:安全性;
  • Dodgy code:糟糕的代码,FindBugs团队认为该类型下的问题代码导 Bug 的可能性很高;
  • Experimental:实验;
  • Multithreaded correctness:关注于同步和多线程问题;
  • Internationalization:国际化

扫描出来的结果怎么看懂,官网有专门的一页介绍 FindBugs Bug Description http://findbugs.sourceforge.net/bugDescriptions.html

除了上面右键菜单启动检查之外,还可以在相应文件夹右键菜单中启动:

针对检查的严格程度,其实是可以调节的,建议修改为 low,这样会尽可能的扫描出有潜在 Bug 的代码片段:

总结

以上是目前工作中经常用到的静态代码检查插键,虽然不是用了它们就真的能写出好代码,但是这些工具的确能够让你能够在前人的肩膀上少踩一些坑。比如阿里的那个检查插键,你可以按照它的提示,对照着他们的 Java 开发手册查看,分析一下,为何他们会有如此的规约。高楼大厦不都是一砖一瓦砌成的嘛?小知识点的基础打扎实了,才能走得更高!

由于国内网络问题,我提前将最新版的《阿里巴巴 Java 开发手册(泰山版).pdf》上传至云盘了,有需要的小伙伴公众号后台回复 泰山版 即可获得下载链接。

一言

上周的写的一篇文章分享到微信群里,群友有人指出来标题有错别字,真是有点尴尬!其实,我写文章也比较随意,也是最近才开始坚持每周至少输出一篇分享的。但想想既然写了,就要尽量保证质量。引以为戒,以后要认真点才行!

目前分享的内容主要是开发环境、效率工具等。自己一直对这方面的文章比较感兴趣,因此之前就有相关积累。今后希望能通过阅读带来一些读书总结的分享,也希望关注的同学后台多留言,给出你的建议,感谢~

生命不息,折腾不止!关注 「Coder魔法院」,祝你 Niubilitiy !

参考

IDEA 插件推荐 —— 让你写出好代码的神器!的更多相关文章

  1. 写出优美代码的两个方式:一步到位VS迭代优化

    最近把手头这个安卓APP的所有事务性方法都写完了,有了以下体会,新手体会,老鸟轻拍   想写成优美代码的人一般都会有这样的想法: 一定要在写每一句代码,写每一个方法,构造每一个类的时候,都要记得优化: ...

  2. NASA关于如何写出安全代码的10条军规

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:NASA关于如何写出安全代码的10条军规.

  3. 推荐4款个人珍藏的IDEA插件!帮你写出不那么差的代码

    @ 目录 Codota:代码智能提示 代码智能补全 代码智能搜索 Alibaba Java Code Guidelines:阿里巴巴 Java 代码规范 手动配置检测规则 使用效果 CheckStyl ...

  4. 你还用拼音为变量命名?新人OIer别傻了,教你写出优质代码

    本篇文章适用语言:python,c++,Java.(其实我就是随便bb) 我们在编辑代码的时候,不免拿其他人的代码进行学习,或者将自己的代码拿给别人修改.这个时候,如何让别人快速读懂你的代码,是提升效 ...

  5. 理解SQL原理,写出高效代码

    做软件开发的,大部分人都离不开跟数据库打交道,特别是erp开发的,跟数据库打交道更是频繁,存储过程动不动就是上千行,数据量大,人员流动大,那么我们还能保证下一段时间系统还能流畅的运行吗?我们还能保证下 ...

  6. 编写Java程序_输入三个整数x,y,z,请把这三个数由小到大输出,请写出实现代码。(3种方法)

    要求说明: 输入三个整数x,y,z,请把这三个数由小到大输出. 实现代码: 第1种方法: import java.util.Scanner; public class xyzMaxMin{ publi ...

  7. VSCode 开发插件 推荐

    VSCode 必装的 10 个高效开发插件  本文介绍了目前前端开发最受欢迎的开发工具 VSCode 必装的 10 个开发插件,用于大大提高软件开发的效率. VSCode 的基本使用可以参考我的原创视 ...

  8. setTimeout和setInterval的区别以及如何写出效率高的倒计时

    1.setTimeout和setInterval都属于js中的定时器,可以规定延迟时间再执行某个操作,不同的是setTimeout在规定时间后执行完某个操作就停止了,而setInterval则可以一直 ...

  9. 如何用java写出无副作用的代码

    搞java的同学们可能对无副作用这个概念比较陌生,这是函数式编程中的一个概念,无副作用的意思就是: 一个函数(java里是方法)的多次调用中,只要输入参数的值相同,输出结果的值也必然相同,并且在这个函 ...

随机推荐

  1. Java中常用的获取从当前月开始的前第i个月、取结束时间与开始时间相差多少个月份等的方法

    @RunWith(SpringRunner.class) @SpringBootTest public class DateTest { @Test public void test(){ DateF ...

  2. java基础篇 之 非静态内部类

    什么是非静态内部类: public class Outer { Outer() { System.out.println("我是外部类"); } class Inner { Inn ...

  3. spring学习笔记(八)webSocket

    知识储备 什么是stomp? 我们可以类比TCP与Http协议,我们知道Http协议是基于TCP协议的,Http协议解决了 web 浏览器发起请求以及 web 服务器响应请求的细节,我们在编码时候只要 ...

  4. 前端自适应样式reset.css

    @charset "utf-8"; /* CSS Document */ html, body, ul, li, ol, dl, dd, dt, p, h1, h2, h3, h4 ...

  5. Day_08【面向对象】扩展案例3_使用多态的形式创建缉毒狗对象,调用缉毒方法和吼叫方法

    分析以下需求,并用代码实现: 1.定义动物类: 行为: 吼叫:没有具体的吼叫行为 吃饭:没有具体的吃饭行为 2.定义缉毒接口 行为: 缉毒 3.定义缉毒狗:犬的一种 行为: 吼叫:汪汪叫 吃饭:狗啃骨 ...

  6. Autojs - 用 JavaScript 实现自己的安卓手机自动化工具脚本

    我是风筝,公众号「古时的风筝」,一个不只有技术的技术公众号,一个在程序圈混迹多年,主业 Java,另外 Python.React 也玩儿的 6 的斜杠开发者. Spring Cloud 系列文章已经完 ...

  7. idea 2020 配置本地 Maven 仓库

    问题: 默认Maven 仓库地址在C盘,C盘是系统盘能少放东西尽量少放. 只需要简单的两步 1.File~Settings 然后搜索 maven 如下图绿框 修改成你自己的 Maven 仓库 2.Fi ...

  8. Android广播时间——实现强制下线功能

    目录 思路:强制下线功能需要先关闭掉所有的活动,然后回到登录界面. 步骤 1.关闭所有活动 2.创建BaseActivity类作为所有活动的父类,因为需要用ActivityCollector管理所有活 ...

  9. Python实现将网站域名解析为ip地址

    起因 因为一些事情,需要将域名解析为ip地址,想到Python作为万能语言,就用Python来实现这个功能 代码 import socket url = 'shiyixirui.cn' res = s ...

  10. python解析谷歌在线表格链接,转化为数组形式,图片转化为链接

    在线表格已成为趋势,传统的表格导入导出已经不能满足现在企业的发展. 必须支持在线表格的导入,只需要输入在线表格的链接,就能将数据读取出来. 而且相比相传表格,能够将图片信息一块读取.在线表格中的图片也 ...