IDEAL葵花宝典:java代码开发规范插件 FindBugs-IDEA
前言:
检测代码中可能的bug及不规范的位置,检测的模式相比p3c更多,写完代码后检测下 避免低级bug,强烈建议用一下,一不小心就发现很多老代码的bug。
使用步骤:
1):打开 Settings---->Plugins---> 进行搜索--->选择---->"FindBugs-IDEA" ----> install

安装插件:点击插件详情中的"install"按钮,按照其提示即可完成安装,安装完成后需重启IDEA。
会发现左下角会出现findbugs的图标 ;

可以分析单个文件,包下面的所有文件,整个module下的文件,整个project下的文件,右键想要分析的文件名/包名/module名/project:

分析完之后就会出现结果面板:(Badpractice 分类详情请往下看...)

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

根据需要可以进行更改,其中Correctness这个错误使我们重点关注的对象,这里大多是空指针的错误,根据提示进行处理。
附:一些常见的错误信息 :
1):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):方法不能对参数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:方法忽略返回的多个字符,如果对结果没有检查就没法正确处理用户读取少量字符请求的情况。
2):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 :使用平台默认的编码格式对字符串进行大小写转换,这可能导致国际字符的转换不当。使用以下方式对字符进行转换
3):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修饰
4):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类型的以防止这种错误。
5):Multithreaded correctness :关于代码正确性相关方面的:
Static DateFormat DateFormat: 在多线程中本身就是不安全的,如果在线程范围中共享一个DateFormat的实例而不使用一个同步的方法在应用中就会出现一些奇怪的行为。
Call to static DateFormat DateFormats:多线程使用本事就是不安全的,改进方法:需要创建多实例或线程同步
6):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 :明显的无限迭代循环,将导致堆栈溢出.
--------------------------------------------------------------------------------
以上内容若有不足之处:请多多请教
如要转载请注明小编本站地址:(https://www.cnblogs.com/mlq2017/)
IDEAL葵花宝典:java代码开发规范插件 FindBugs-IDEA的更多相关文章
- IDEAL葵花宝典:java代码开发规范插件 p3c
前言: P3C插件 是阿里巴巴p3c项目组进行研发.这个项目组是阿里巴巴开发爱好者自发组织形成的虚拟项目组,根据<阿里巴巴Java开发规范>转化而成的自动化插件,并且实现了部分自动编程. ...
- IDEAL葵花宝典:java代码开发规范插件 lombok 插件
前言: lombok简介: lombok是暑假来到公司实习的时候发现的一个非常好用的小工具,刚见到的时候就感觉非常惊艳,有一种相见恨晚的感觉,用了一段时间之后感觉的确挺不错,所以特此来推荐一下. 那么 ...
- IDEAL葵花宝典:java代码开发规范插件 checkstyle、visualVM、PMD 插件
前言: visualVM: 运行java程序的时候启动visualvm,方便查看jvm的情况 比如堆内存大小的分配:某个对象占用了多大的内存,jvm调优必备工具. checkstyle: CheckS ...
- IDEAL葵花宝典:java代码开发规范插件 GenerateAllSetter、ECtranslation、translation、插件
前言: GenerateAllSetter: 我们在程序开发过程中,往往要编写这样的类:类的部分或者全部属性不希望让外部世界直接访问,而不用public字段修饰.这样,方法调用成了访问这些属性的唯一 ...
- IDEAL葵花宝典:java代码开发规范插件:GsonFormat插件将JSONObject格式的String 解析成实体
前言: GsonFormat插件主要用于使用Gson库将JSONObject格式的String 解析成实体,该插件可以加快开发进度,使用非常方便,效率高. 这个教程主要是学习IntelliJ IDEA ...
- IDEAL葵花宝典:java代码开发规范插件 (maven helper)解决maven 包冲突的问题
小编说到: 在我们日常开发当中常常我们会遇到JAR包冲突.找来找去还找不到很是烦人.那么所谓的JAR包冲突是指的什么那?JAR包冲突就是-引入的同一个JAR包却有好几个版本. 例如: 项目中引用了两个 ...
- IDEAL葵花宝典:java代码开发规范插件 Rainbow Brackets 插件
前言: 最近在Jetbrains IDEA插件网站逛发现了 Rainbow Brackets这款插件,非常棒,推荐给大家. 可以实现配对括号相同颜色,并且实现选中区域代码高亮的功能. 对增强写代码的有 ...
- JAVA 代码开发规范
一.开发工具规范: 1. 开发工具经项目负责人调试后统一确定. 2. 开发工具一经确定不允许集成任何非统一插件,若有需要,经项目负责人同意后统一为 项目组成员添加. 3. 开发工具的编码格式不允许修改 ...
- Java代码Bug分析插件 FindBugs
http://www.oschina.net/p/findbugs FindBugs是一个能静态分析源代码中可能会出现Bug的Eclipse插件工具.
随机推荐
- java命令行
Launches a Java application. Synopsis java [options] classname [args] java [options] -jar filename [ ...
- vue2.0 仿手机新闻站(三)通过 vuex 进行状态管理
1.创建 store 结构 2.main.js 引入 vuex 3. App.vue 组件使用 vuex <template> <div id="app"&g ...
- UTF-8 可变编码格式
转自:http://blog.csdn.net/swedenfeng/article/details/53467720 UTF-8 是一种可变编码格式,长度从一个字节到四个字节,可根据UTF-8字 ...
- SQLAlchemy使用笔记--SQLAlchemy ORM(三)
參考: http://docs.sqlalchemy.org/en/rel_1_0/orm/tutorial.html#eager-loading 预先载入 前面的代码,由于是lazy load.当我 ...
- uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型 - 大总结
uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型 在nesc的代码中,你会看到非常多你不认识的数据类型,比方uint8_t等.咋一看.好像是个新的数据类 ...
- 配置mysql 编码
配置mysql 编码 [client]default-character-set=utf8mb4 default-storage-engine=INNODB [mysql]default-charac ...
- js的常用小技巧
//类对象转成数组 var domNodes = Array.prototype.slice.call(document.getElementsByTagName("*")); ...
- Rate Monotonic Scheduling algorithm
这篇文章写得不错 http://barrgroup.com/embedded-systems/How-To/RMA-Rate-Monotonic-Algorithm 另外rtems的官方文档也有类似说 ...
- vagrant 介绍,安装与使用
可以帮你统一团队成员的开发环境.如果你或者你的伙伴创建了一个Vagrantfile,那么你只需要执行vagrant up就行了,所有的软件都会安装并且配置好.团队成员可以通过相同的Vagrantfil ...
- PowerBuilder -- Len(), LenA() 与 String, Blob
使用的是Powerbuilder12.5与Powerbuild9 不太一样 函数 String Blob Len() 返回字符数 返回字符数对应的字节数 LenA() 返回字节数 返回字符数对应的字节 ...