本文主要介绍IDEA插件FindBugs的使用详解,对于大家来说非常详细,对于大家的学习或者工作都有一定的参考价值。有需要的朋友可以参考一下。
序
Findbugs对很多人来说并不陌生。Eclipse中有一个插件可以帮助发现代码中隐藏的bug,IDEA中也有这个插件。这个插件可以帮助我们发现隐藏的bug,更重要的功能是发现潜在的空指针。
在编写代码的过程中,我们可能并不总是记得检查空引用,测试时可能很难发现问题。但是应用上线后,面对大量的用户会出现很多问题。所以编码的时候,有必要用findbugs检查一下。
固定
安装完成后,重启studio,你会在左下角找到findbugs图标。
您可以分析单个文件、包下的所有文件、整个模块下的文件以及整个项目下的文件。右键单击要分析的文件名/包名/模块名/项目。
分析后,将出现结果面板。
单击右侧相应的项目,找到具体的代码。
可以根据需要更改,其中正确性的错误让我们把重点放在对象上,这里多是空指针错误,按照提示处理。
附:一些常见的错误信息
Bad practice 代码中的一些坏习惯
类名应该以大写字母开头字母主要包括类名的命名,以大写字母开头。
方法名应该以小写字母开头。
字段名应该以小写字母开头。
equals()方法不检查空参数。equals()方法应该检查它是否为空。
类定义equals()并使用Object.hashCode()类重写equals方法,但不重写hashCode方法,并使用Object对象的hashCode方法。
MethodIgnores异常返回值方法忽略返回值的异常信息。
equals方法不应该对其参数equals (object o)的类型做任何假设。方法不能对参数O的类型做任何假设.将此对象与指定的对象进行比较。并且只有当该参数不为空并且它是表示与该对象相同类型的对象时,结果才为真。
使用==or比较字符串对象!=Use==or!=比较字符串类型的对象
methodmightinoreexception方法可能会忽略该异常。
方法调用System.exit()调用方法中的System.exit(…)语句。请考虑改用RuntimeException。
输入流的MethodIgnores结果。Read()输入流。方法忽略返回的多个字符。如果结果没有被检查,用户读取少量字符的请求就不能被正确处理。
Dodgy code 糟糕的代码
在缺省case缺失的地方找到了语句。默认情况下,开关没有执行case语句。
在一个case切换到下一个case switch语句的语句中,执行一个分支,然后执行下一个分支。Case后面通常跟着break或return语句跳出。
死存储到局部变量这个指令把一个值赋给一个局部变量,但是它以后不再使用它。通常,这表示有错误,因为该值从未被使用过。
从实例方法写入静态字段在实例方法中写入静态字段。
在已知为非空值的冗余空值检查方法中,非空值被判断为空。
方法对两个分支使用相同的代码。该方法使用相同的代码实现两个条件分支。检查以确保这是一个编码错误。
当在try/catch块中未引发异常,但在try语句中未引发异常,并且未显式捕获RuntimeException时,会捕获异常。
整型除法结果强制转换为double或float类型。
由于被调用方法的返回值而导致的可能的空指针引用的返回值被重新赋值,而不检查它是否为空,这可能导致空指针异常。
无用的对象被创建对象被创建并且无用。
未读公共/受保护字段的未使用字段
国际化关于代码国际化的相关方面
考虑使用被调用方法的语言环境参数化版本
使用平台的默认编码格式来转换字符串的大小写,这可能会导致国际字符的不正确转换。使用以下方法转换字符
Performance 关于代码性能相关方面的
对基元类型转换(如字符串到int的转换)进行装箱/取消装箱时,应使用Integer.parseInt(" ")而不是Integer.valueOf(" ")
方法在loop中使用连接字符串
每次在循环中连接一个字符串,都会生成一个新的string对象。在java中,创建一个新对象的成本非常昂贵,尤其是在循环语句中,效率很低。
解决方法:使用StringBuffer或StringBuilder重用对象。
从未调用该方法。未调用私有方法。
显式垃圾收集;除了基准代码之外,非常可疑
在代码中显式调用垃圾收集命名不起作用。以前有人在close操作或者finalize方法中调用垃圾收集方法,造成了大量的性能浪费。这将导致处理器在大规模回收对象时运行缓慢。
未读字段:这个字段应该是静态的吗?未使用的静态字段
应该是一个静态内部类。这个内部类应该用static。
Experimental
方法可能无法在检查到异常时清理流或资源
此方法可能无法清除(关闭、释放)流、数据库对象或其他资源,需要执行清除操作。
解决方案:流的结束是最后写入的。
恶意代码漏洞:恶意代码破坏的相关方面
可以通过合并对可变对象的引用来公开内部表示
这段代码将外部可变对象引用存储到对象的内部表示中。如果实例被不受信任的代码访问,并且未经检查的更改会危及对象和重要属性的安全。在许多情况下,最好存储一个对象的副本。
该字段不是最终字段,但应该是最终字段。
字段不是最终的,不能防止恶意代码。此字段前应添加Final。
字段应受到包装保护
恶意代码或其他包可以访问和修改静态字段。您可以将这种类型的字段声明为final以防止此错误。
Multithreaded correctness 关于代码正确性相关方面的
静态日期格式日期格式本身在多线程中是不安全的。如果在thread范围内共享DateFormat的一个实例而不使用同步方法,应用程序中会出现一些奇怪的行为。
要调用静态日期格式,使用多线程是不安全的。改进方法是创建多个实例或线程同步。
Correctness 关于代码正确性相关方面的
检查以前取消引用的值这段代码放弃了以前的空值检查。解决方法检查null。
可能的空指针取消引用可能为空。
空指针取消引用对象在被分配空值后没有被重新分配。
异常路径上的方法中可能存在空指针取消引用在处理异常为空值的分支调用的方法中可能存在对象取消引用操作。
为空,并保证在异常路径异常分支上被解引用,有一个方法引用了一个空对象,该对象引发空指针异常。
在值与自身的自比较方法中,局部变量被自身比较,并且可以解释错误或逻辑错误。请确保你在做正确的事情。
一个显而易见的无限递归循环的显而易见的无限迭代循环会导致堆栈溢出。
关于IDEA插件FindBugs使用的详细说明,本文到此为止。有关IDEA插件FindBugs的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。