关于javafindbugs的信息

findbugs,pmd,checkstyles三者都是代码规范静态检查工具,它们之间有何异同

区别是: findbug与pclint都是针对软件漏洞进行代码检测的工具软件。findbug针对的是Java代码,pclint针对的是C代码或者C++。 Findbugs是一款Java静态代码分析工具,与其他静态分析工具(如Checkstyle和PMD)不同,Findbugs 不注重样式或者格式

关于javafindbugs的信息

FindBugs 规则整理:Bad Practice

目前已转至个人博客,本系列地址: Lam’s Blog – Knowledge as Action

Creates an empty jar file entry

调用putNextEntry()方法写入新的 jar 文件条目时立即调用closeEntry()方法。这样会造成JarFile条目为空。

Creates an empty zip file entry

调用putNextEntry()方法写入新的 zip 文件条目时立即调用closeEntry()方法。这样会造成ZipFile条目为空。

Equals method should not assume anything about the type of its argument

equals(Object o)方法不能对参数o的类型做任何的假设。比较此对象与指定的对象。当且仅当该参数不为 null,并且是表示与此对象相同的类型的对象时,结果才为 true。

Random object created and used only once

随机创建对象只使用过一次就抛弃

Check for sign of bitwise operation

检查位操作符运行是否合理

Class implements Cloneable but does not define or use clone method

类实现了Cloneable接口,但是没有定义或使用clone方法。按照惯例,实现此接口的类应该使用公共方法重写 Object.clone(它是受保护的),以获得有关重写此方法的详细信息

clone method does not call super.clone()

一个非final类型的类定义了clone()方法而没有调用super.clone()方法。例如:B扩展自A,如果B中clone方法调用了spuer.clone(),而A中的clone没有调用spuer.clone(),就会造成结果类型不准确。要求A的clone方法中调用spuer.clone()方法。

Class defines clone() but doesn’t implement Cloneable

类中定义了clone方法但是它没有实现Cloneable接口

Abstract class defines covariant compareTo() method

抽象类中定义了多个compareTo()方法,正确的是覆写Comparable中的compareTo方法,方法的参数为Object类型

Covariant compareTo() method defined

类中定义了多个compareTo()方法,正确的是覆写Comparable中的compareTo方法,方法的参数为Object类型

Method might drop exception

方法可能抛出异常

Method might ignore exception

方法可能忽略异常

Don’t use removeAll to clear a collection

不要用removeAll方法去clear一个集合

Classloaders should only be created inside doPrivileged block

类加载器只能建立在特殊的方法体内

Method invokes System.exit(…)

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

Method invokes dangerous method runFinalizersOnExit

在方法中调用了System.runFinalizersOnExit 或者Runtime.runFinalizersOnExit方法,因为这样做是很危险的。

Comparison of String parameter using == or !=

用==或者!=方法去比较String类型的参数

Abstract class defines covariant equals() method

抽象类定义了共变的compareTo()方法

Equals checks for noncompatible operand

equals方法检查不一致的操作。两个类根本就是父子关系而去调用equals方法去判读对象是否相等。

Class defines compareTo(…) and uses Object.equals()

类定义了compareTo(…)方法,却使用Object.equals()方法

equals method fails for subtypes

类中的equals方法可能被子类中的方法所破坏,当使用类似于Foo.class == o.getClass()的判断时考虑用this.getClass() == o.getClass()来替换

Covariant equals() method defined

类中定义了多个equals方法。正确的做法是覆写Object中的equals方法,它的参数为Object类型的对象。

Empty finalizer should be deleted

应当删除空的finalize()方法

Unchecked type in generic call

泛型调用中使用了未检查的类型

Class defines equals() but not hashCode()

方法定义了equals方法却没有定义hashCode方法

Class defines hashCode() but not equals()

类定义了hashCode方法去没有定义equal方法

Class defines equals() and uses Object.hashCode()

一个类覆写了equals方法,没有覆写hashCode方法,使用了Object对象的hashCode方法

Class inherits equals() and uses Object.hashCode()

子类继承了父类的equals方法却使用了Object的hashCode方法

Superclass uses subclass during initialization

子类在父类未初始化之前使用父类对象实例

Dubious catching of IllegalMonitorStateException

可疑的IllegalMonitorStateException异常捕捉

Needless instantiation of class that only supplies static methods

为使用静态方法而创建一个实例对象。调用静态方法时只需要使用类名+静态方法名就可以了。

Iterator next() method can’t throw NoSuchElementException

迭代器的next方法不能够抛出NoSuchElementException

Store of non serializable object into HttpSession

在HttpSession对象中保存非连续的对象

Fields of immutable classes should be final

不可变类的字段应当是final的

Method with Boolean return type returns explicit null

返回值为boolean类型的方法直接返回null,这样会导致空指针异常

equals() method does not check for null argument

变量调用equals方法时没有进行是否为null的判断

toString method may return null

toString方法可能返回null

Class names should start with an upper case letter

类的名称以大写字母名称开头

Class is not derived from an Exception, even though it is named as such

类的名称中含有Exception但是却不是一个异常类的子类,这种名称会造成混淆

Confusing method names

令人迷惑的方法命名

Field names should start with a lower case letter

非final类型的字段需要遵循驼峰命名原则

Use of identifier that is a keyword in later versions of Java

验证是否是java预留关键字

Use of identifier that is a keyword in later versions of Java

验证是否时java中的关键字

Method names should start with a lower case letter

方法名称以小写字母开头

Class names shouldn’t shadow simple name of implemented interface

实现同一接口实现类不能使用相同的名称,即使它们位于不同的包中

Class names shouldn’t shadow simple name of superclass

继承同一父类的子类不能使用相同的名称,即使它们位于不同的包中

Very confusing method names (but perhaps intentional)

很容易混淆的方法命名,例如方法的名称使用大小写来区别两个不同的方法。

Method doesn’t override method in superclass due to wrong package for parameter

由于错误引用了不同包中相同类名的对象而不能够正确的覆写父类中的方法

Method may fail to close database resource

方法中可能存在关闭数据连接失败的情况

Method may fail to close stream

方法中可能存在关闭流失败的情况

Method may fail to close stream on exception

方法中可能存在关闭流时出现异常情况

Suspicious reference comparison to constant

当两者为不同类型的对象时使用equals方法来比较它们的值是否相等,而不是使用==方法。例如比较的两者为java.lang.Integer, java.lang.Float

Method ignores results of InputStream.read()

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

Method ignores results of InputStream.skip()

InputStream.skip()方法忽略返回的多个字符,如果对结果没有检查就没法正确处理用户跳过少量字符请求的情况

Method ignores exceptional return value

方法忽略返回值的异常信息

Static initializer creates instance before all static final fields assigned

在所有的static final字段赋值之前去使用静态初始化的方法创建一个类的实例。

Non-serializable value stored into instance field of a serializable class

非序列化的值保存在声明为序列化的的非序列化字段中

Comparator doesn’t implement Serializable

Comparator接口没有实现Serializable接口

Serializable inner class

序列化内部类

serialVersionUID isn’t final

serialVersionUID不是final的

Class is Serializable but its superclass doesn’t define a void constructor

子类序列化时父类没有提供一个void的构造函数

Class is Externalizable but doesn’t define a void constructor

Externalizable 实例类没有定义一个void类型的构造函数

The readResolve method must be declared with a return type of Object.

readResolve从流中读取类的一个实例,此方法必须声明返回一个Object类型的对象

Transient field that isn’t set by deserialization.

不需要被反序列化的字段没有声明transient

Class is Serializable, but doesn’t define serialVersionUID

一个类实现了Serializable接口但是没有定义serialVersionUID类型的变量。序列化运行时使用一个称为 serialVersionUID 的版本号与每个可序列化类相关联,该序列号在反序列化过程中用于验证序列化对象的发送者和接收者是否为该对象加载了与序列化兼容的类。如果接收者加载的该对象的类的 serialVersionUID 与对应的发送者的类的版本号不同,则反序列化将会导致 InvalidClassException。可序列化类可以通过声明名为 “serialVersionUID” 的字段(该字段必须是静态 (static)、最终 (final) 的 long 型字段)显式声明其自己的 serialVersionUID

Usage of GetResource may be unsafe if class is extended

当一个类被子类继承后不要使用this.getClass().getResource(…)来获取资源

FindBugs:简介与使用

FindBugs 规则整理:CORRECTNESS

FindBugs 规则整理:Style Dodgy

FindBugs 规则整理:Malicious Code Vulnerability

FindBugs 规则整理:Multithreaded Correctness

FindBugs 规则整理:Security Experimental

FindBugs 规则整理:Performance

FindBugs 规则整理:Internationalization

整合以下文章过程中发现部分存在翻译错误,已做修正,同时感谢以下文章作者

FindBugs使用备忘录

FindBugs规则整理

详解FindBugs的各项检测器

Findbugs 缺陷详解与英文代号的对照表

java findbugs 这个警告怎么解决

编程的初期可以把checkStyle、findBugs这些都disable掉。因为检查代码都是后期的工作,首先要让程序能够跑起来,然后再考虑效率问题,最后才考虑代码格式等次重要的东西。 一般来说checkStyle的警告都是可以不予理睬的,比如说name hides a field、magic number,对你编程没有影响。但是对开发软件产品来说,这个是最后必须要消除的。因为这将影响你写的代码的可读性,进而影响到将来代码优化和维护。 name hides a field警告指方法的参数和类里面定义的域(或者说是成员变量,数据成员)重名了,换个其他名字就行了,比如说name改为n。 magic number就是指程序里那些不用取变量名,直接把常量值写在使用它的地方的那种数字。

findBugs 这个报的是什么错误

FindBugs是静态分析工具不是错误。

它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。不是通过分析类文件的形式或结构来确定程序的意图,而是通常使用 Visitor 模式。

在FindBugs的GUI中,需要先选择待扫描的.class文件(FindBugs其实就是对编译后的class进行扫描,藉以发现一些隐藏的bug。)。如果你拥有这些.class档对应的源文件,可把这些.java文件再选上,这样便可以从稍后得出的报告中快捷的定位到出问题的代码上面。此外,还可以选上工程所使用的library,这样似乎可以帮助FindBugs做一些高阶的检查,藉以发现一些更深层的bug。

扩展资料

findBugs检查的bug类型包括:

1、Malicious code vulnerability:恶意代码

2、Dodgy code:不符合规范的代码

3、Internationalization:国际化相关问题,如错误的字符串转换;

4、Bad practice:坏的实践:常见代码错误,序列化错误,用于静态代码检查时进行缺陷模式匹配;

5、Multithreaded correctness:多线程的正确性:如多线程编程时常见的同步,线程调度问题;

6、Performance:运行时性能问题,如由变量定义,方法调用导致的代码低效问题。

7、Correctness:可能导致错误的代码,如空指针引用等;

8、Experimental:可能受到的恶意攻击,如访问权限修饰符的定义等;

9、Security:安全性

参考资料来源:百度百科-FindBugs

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月26日 12:39:09
下一篇 2024年3月26日 12:46:24

相关推荐

  • 关于avrstudio6c语言的信息

    c语言的程序员们你们公司用的开发工具是什么呢? 学c语言可以用的软件推荐如下:TurboC是由美国Borland公司开发的一套C语言程序开发工具,Borland公司是一家专门从事软件开发、研制的大公司。 Code:Blocks是一个开放源码的全功能的跨平台C/C++集成开发环境。Code:Blocks是开放源码软件。Code:Blocks由纯粹的C++语言开…

    2024年5月23日
    4500
  • 关于java如何查找线程的信息

    kill-3生成的线程堆栈怎么查看 通过给JVM发送一个SIGQUIT信号,您可以得到一个线程堆。 threaddump文件就是文本文件,可以使用任何文本查看工具进行查看; 建议使用比较高效的工具,比如more, less 等。 “Full thread dump”是一个全局唯一的关键字,你可以在中间件和单机版本Java的线程堆栈信息的输出日志中找到它(比如…

    2024年5月23日
    4000
  • 关于javasocketreader的信息

    用JAVA编写一个socket通信程序。 1、java编程对于Socket之间的通信过程如下:服务端往Socket的输出流里面写东西,客户端就可以通过Socket的输入流读取对应的内容。 2、服务端初始化ServerSocket,然后对指定的端口进行绑定,接着对端口及进行监听,通过调用accept方法阻塞。 此时,如果客户端有一个socket连接到服务端,那…

    2024年5月23日
    7800
  • 关于javapitfallspdf的信息

    怎么用java动态生成pdf文档 1、首先,您需要在 Java 程序中添加 Spire.Xls.jar 文件作为依赖项。您可以从这个链接下载 JAR 文件;如果您使用 Maven,则可以通过在 pom.xml 文件中添加以下代码导入 JAR 文件。 2、iText是着名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通…

    2024年5月23日
    4200
  • 关于pythonexcel打印设置字体的信息

    如何使用python更改excel表中的字体属性 字体,背景,边框等的颜色都可以通过三种方式设置:索引,aRGB或主题。 索引颜色是旧版实现,颜色本身取决于工作薄或应用程序默认提供的索引。主题颜色可用于互补色,但也取决于工作薄中存在的主题,因此,建议使用RGB颜色。 有着一定的参考价值,有需要的朋友可以参考一下可使用的第三方库python中处理excel表格…

    2024年5月23日
    4500
  • 关于linuxjpeg下载的信息

    请问怎么用grub2直接引导win10,本人Linux新手 第一步,当然是下载linux ubuntu1x的镜像了,这个小伙伴可以百度,去正规的网站现在,这里,我先提供一个站点:mirrors.xmu.edu.cn,厦门大学的信息与网络中心。里面有很多linux版本。有Deepin CenOS ubuntu什么什么的。 第一步:\x0d\x0a当然是下载Ub…

    2024年5月23日
    5200
  • 关于excel2013vc的信息

    如何利用VC++自动生成Excel表格 1、首先,我们需要点击文件菜单栏按钮。然后,我们点击生成EXE按钮。接下来,我们点击保存路径。然后,我们输入我们想要保存的文件名。最后,我们点击确定按钮。然后,我们便可以看到,在桌面生成了Excel表格了。 2、在主对话框中加入一个按钮 ID IDC_EXCELTEST Caption Test Excel 双击该按钮…

    2024年5月23日
    5200
  • 关于2t硬盘linux分区的信息

    linux硬盘2TB限制问题 1、Linux中进行磁盘分区一般是用fdisk这个命令,但是fdisk命令无法支持大于2TB以上的分区,而parted命令却是用于2TB以上大小的磁盘分区的工具。 2、asm无法识别2t磁盘是因为在分区的时候造成的,所以asm和linux都会有这个2T的限制。磁盘分区主要有MBR和GPT两种方式,发生2T限制的正是这个MBR方式…

    2024年5月23日
    8200
  • 关于linux下载geneontology的信息

    下载GO/KEGG某一pathway的genelist 功能(GO)或者通路(Pathway)富集分析时,都会涉及到 Background; 做分析时,分析工具会提供一些数据供使用者选择或者使用自定义的gene list。 clusterProfiler是一个功能强大的R包,同时支持GO和KEGG的富集分析,而且可视化功能非常的优秀,本章主要介绍利用这个R包…

    2024年5月23日
    4900
  • 关于linux下的mnt目录的信息

    Linux目录结构 总体而言,Linux系统的文件系统由块设备、分区、文件系统、目录结构、文件和元数据以及挂载点等组成。这种组织结构和层次关系提供了对文件和目录的有效管理和访问机制。 根目录和家目录均只是一种linux文件挂载点,linux采用树状发展目录结构根目录就是第一级,家目录与根目录看起来只是一个一级目录和二级目录的关系,实际上差别很大。 首先,打开…

    2024年5月23日
    5300

发表回复

登录后才能评论



关注微信