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插件工具.
随机推荐
- Android4.0(Phone)拨号启动过程分析(一)
因为工作的须要.须要改动原生的Phone程序,如今就好好看下来电与拨号是怎样处理的:无论是拨号还是来电,调用的都是Phone程序,因为非常多类都涉及到framework层,比較复杂:先从简单的拨号分析 ...
- 可软件定义的存储逻辑——Efficient and agile storage management in software defined environments
note:写这个或许算是翻译,又或算是对这个论文[1]的理解,又或者仅仅是我的看法. 这篇论文和IOFlow相比較,更加注重软件定义存储的框架(利用已有的框架来创建新的 ...
- DeepinXP Lite 6.2 精简版220M 安装IIS
本作品由Man_华创作,采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可.基于http://www.cnblogs.com/manhua/上的作品创作. 用虚拟机装了DEEP ...
- linux使用crontab实现PHP执行定时任务(转)
前几天写过一篇文章,利用单纯的php实现定时执行任务,但是效率不佳,对于linux来说用crontab实现更加合理. 首先说说cron,它是一个linux下的定时执行工具.根用户以外的用户可以使用 c ...
- android 5.0 默认水波纹背景属性,可设置不论什么View
actionBarItemBackground 5.0以上超出边界圆形水波纹 selectableItemBackground 5.0以上边界内圆形水波纹 这两个属性在5.0下面是默认的灰色效果 ...
- 李振杰:火狐Mozilla被黑事件的启发
火狐浏览器开发商Mozilla近日宣布,因为数据库存在漏洞.Mozilla开发者的数万个电子邮件地址和加密password或遭到黑客窃取. 好多有为青年们往往刚刚获得了一个小成功,便開始沾沾自喜,自命 ...
- 理解Linux系统负荷(WDCP系统后台参数之一)
一.查看系统负荷 如果你的网站很卡,可能是因为服务器很慢,,你或许想查看一下,它的工作量是否太大了. 在Linux系统中,我们一般使用uptime命令查看(w命令和top命令也行).(另外,它们在苹果 ...
- java eclipse使用不同jdk版本
因为开发需要,两个工程分别需要使用jdk1.6(elipse indigo)和jdk1.8(eclipse neon).因为两个eclipse对于jdk版本的要求不同,若只在环境变量中配置jdk版本, ...
- 图像处理之基础---二维卷积c实现
http://wenku.baidu.com/link?url=4RzdmvP9sdaaUbnVEW4OyBD-g67wIOiJjKFF3Le_bu7hIiBS7I6hMcDmCXrQwsHvrsPv ...
- Android重写FragmentTabHost来实现状态保存
近期要做一个类似QQ底部有气泡的功能,试了几个方案不太好.我想非常多开发人员使用TabHost都会知道它不保存状态.每次都要又一次载入布局.为了保存状态,使用RadioGroup来实现.状态是能够保存 ...