IDEA有了这些插件,再也不用担心编码规范了

Mybatis Plugin插件安装使用说明

1 介绍

为了让开发者更规范、快速地工作,为了将编码规范推进并实施起来,该插件主要是在mapper接口方法和mapper XML文件之间来回切换非常方便,而且还可以自动生成xml代码,极大的提高了开发效率。

2 安装

"File->settings"


image.png

"Plugins->Browse repositories"


image.png

搜索"Free Mybatis plugin",点击安装,安装完之后,重启idea,会发现如下出现的图标
image.png

阿里编码规约插件安装使用说明

1 介绍

为了让开发者更规范、快速地工作,为了将编码规范推进并实施起来,阿里C3P项目组研发了一套自动化的IDE检测插件。
功能提现在以下三个方面:
1.手动扫描代码后,不符合规约的代码按Blocker/Critical/Major三个等级显示出来。
2.基于Inspection机制的实时检测功能,编写代码的同时也能快速发现问题所在。
3.对于历史代码,部分规则实现了批量一键修复的功能。

2 安装

"File->settings"


image.png

"Plugins->Browse repositories"


image.png

搜索"Alibaba Java Coding Guidelines",点击安装,安装完之后,重启idea,会发现如下出现的图标
image.png

image.png

3 使用说明

可以分析当前编辑的文件,也可以分析整个项目模块代码。


image.png

image.png

从图中可以看出扫描结果有block错误(不符合命名方式);有critical错误和major错误。双击可以定位至代码处,右侧窗口还有代码的批量修复功能。

Blocker/Critical/Major三个等级,在 Snoar 中对代码规则有五个级别,这是前三个,翻译下就是:崩溃/严重/重要 ,也就是说前两级别是必须要处理掉的。

FindBugs-IDEA插件使用说明

1 介绍

这个插件可以帮助我们查找隐藏的bug,比较重要的功能就是查找潜在的null指针。在编写代码的过程中,我们可能不会一直记得检查空的引用,在我们测试时可能很难发现问题,但是应用上线之后,面对大量的用户,很多问题就会浮现出来。所以在编码时,使用findbugs检查一下很有必要。

2 安装

"File->settings"


image.png

"Plugins->Browse repositories"


image.png

搜索"FindBugs-IDEA",点击安装,安装完之后,重启idea,会发现如下出现的图标
image.png

image.png

3 使用说明

可以分析单个文件,包下面的所有文件,整个module下的文件,整个project下的文件,右键想要分析的文件名/包名/module名/project
1.右键项目模块


image.png

分析完之后就会出现结果面板


image.png

点击对应的item在右边会定位到具体的代码
image.png

根据需要可以进行更改,其中Correctness这个错误使我们重点关注的对象,这里大多是空指针的错误,根据提示进行处理。
image.png

点击如图按钮可分析当前文件

4 一些常见的错误信息

Bad practice 代码中的一些坏习惯

Class names should start with an upper case letter 主要包括类名的命名,以大写字母开头

Method names should start with a lower case letter 方法名以小写字母开头

Field names should start with a lower case letter 字段名以小写字母开头

equals()method does not check for null argument equals()方法应该检查非空

Class defines equals() and uses Object.hashCode() 一个类覆写了equals方法,没有覆写hashCode方法,使用了Object对象的hashCode方法

Method ignores exceptional return value 方法忽略返回值的异常信息

Equals method should not assume anything about the type of its argument equals(Object)方法不能对参数o的类型做任何的假设。比较此对象与指定的对象。当且仅当该参数不为 null,并且是表示与此对象相同的类型的对象时,结果才为 true。

Comparison of String objects using == or != 用==或者!=去比较String类型的对象

Method might ignore exception 方法可能忽略异常

Method invokes System.exit() 在方法中调用System.exit(…)语句,考虑用RuntimeException来代替

Method ignores result of InputStream.read() InputStream.read方法忽略返回的多个字符,如果对结果没有检查就没法正确处理用户读取少量字符请求的情况。

Dodgy code 糟糕的代码

Switch statement found where default case is missing Switch没有默认情况下执行的case语句

Switch statement found where one case falls through to the next case Switch语句中一个分支执行后又执行了下一个分支。通常case后面要跟break 或者return语句来跳出。

Dead store to local variable 该指令为局部变量赋值,但在其后的没有对她做任何使用。通常,这表明一个错误,因为值从未使用过。

Write to static field from instance method 在实例方法写入静态字段

Redundant nullcheck of value known to be non-null 方法中对不为空的值进行为空的判断。

Method uses the same code for two branches 此方法使用相同的代码,以实现两个有条件的分支。检查以确保这是不是一个编码错误

Exception is caught when Exception is not thrown 在try/catch块中捕获异常,但是异常没有在try语句中抛出而RuntimeException又没有明确的被捕获

Integral division result cast to double or float 整形数除法强制转换为double或者float类型。

Possible null pointer dereference due to return value of called method 方法的返回值没有进行是否为空的检查就重新赋值,这样可能会出现空指针异常。

Useless object created 对象创建了并没有用

Unread public/protected field 没有用到的字段

Internationalization 关于代码国际化相关方面的

Consider using Locale parameterized version of invoked method

使用平台默认的编码格式对字符串进行大小写转换,这可能导致国际字符的转换不当。使用以下方式对字符进行转换

Performance 关于代码性能相关方面的

Boxing/unboxing to parse a primitive
类型转换 比如字符串转换成int 应该使用Integer.parseInt(“”) 代替Integer.valueOf(“”)

Method concatenates string using + in aloop
每次循环里的字符串+连接,都会新产生一个string对象,在java中,新建一个对象的代价是很昂贵的,特别是在循环语句中,效率较低 。解决办法:使用StringBuffer或者StringBuilder重用对象。

Private method is never called 私有方法没有被调用

Explicit garbage collection;extremely dubious except in benchmarking code
在代码中显式的调用垃圾回收命名,这样做并不能起作用。在过去,有人在关闭操作或者finalize方法中调用垃圾回收方法导致了很多的性能浪费。这样大规模回收对象时会造成处理器运行缓慢。

Unread field:should this field be static? 没有用到的static 字段

should be a static inner class 此内部类应该使用static修饰

Experimental

Method may fail to clean up stream or resource on checked exception
这种方法可能无法清除(关闭,处置)一个流,数据库对象,或其他资源需要一个明确的清理行动 。解决方法:流的关闭都写在finally里面

Malicious code vulnerability 关于恶意破坏代码相关方面的

May expose internal representation by incorporating reference to mutable object
此代码把外部可变对象引用存储到对象的内部表示。如果实例受到不信任的代码的访问和没有检查的变化危及对象和重要属性的安全。存储一个对象的副本,在很多情况下是更好的办法。

Field isn’t final but should be 此字段前应该加final

Field isn’t final and can’t be protected from malicious code 此字段前应该加final

Field should be package protected
一个静态字段是可以被恶意代码或其他的包访问修改。可以把这种类型的字段声明为final类型的以防止这种错误。

Multithreaded correctness 关于代码正确性相关方面的

Static DateFormat DateFormat 在多线程中本身就是不安全的,如果在线程范围中共享一个DateFormat的实例而不使用一个同步的方法在应用中就会出现一些奇怪的行为。

Call to static DateFormat DateFormats多线程使用本事就是不安全的,改进方法:需要创建多实例或线程同步

Correctness 关于代码正确性相关方面的

Nullcheck of value previously dereferenced 此代码之前废弃null值检查。解决办法 进行null检查

Possible null pointer dereference 可能为null

Null pointer dereference 对象赋为null值后 没有被重新赋值

Possible null pointer dereference in method on exception path 在异常null值处理分支调用的方法上,可能存在对象去除引用操作

value is null and guaranteed to be dereferenced on exception path exception分支上,存在引用一个null对象的方法,引发空指针异常。

Self comparison of value with itself 方法中对一个局部变量自身进行比较运算,并可说明错误或逻辑错误。请确保您是比较正确的事情。

An apparent infinite recursive loop 明显的无限迭代循环,将导致堆栈溢出.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容