FindBugs Warnings 警告类型文档

FindBugs Warnings 警告类型文档

一、 

Type : EI_EXPOSE_REP

Category:MALICIOUS_CODE(恶意程序代码)

描述:may exposeinternal representation by returning  getter方法返回引用类型
eclipse自动生成的引用类型(Object、数组、Date等)的getter、setter方法会得到或通过对可变对象的引用操作而暴露代码内部实现,解决方法很多,只要返回的或赋值的对象不是原引用对象即可。

例如:

以Date类型为例:

private java.util.Datefirstdate;

publicvoidsetFirstdate(java.util.Datevalue) {

       this.firstdate =value;

    }

    public java.util.Date getFirstdate(){

       returnthis.firstdate;

    }

改为:

public String getFirstdate() {

       returnfirstdate;

    }

    publicvoidsetFirstdate(Stringfirstdate)
{

       this.firstdate =firstdate;

    }

二、 

Type : EI_EXPOSE_REP2

Category:MALICIOUS_CODE(恶意程序代码)

描述:may expose internal representation by storing an externallymutable object into  setter方法返回引用类型
eclipse自动生成的引用类型(Object、数组、Date等)的getter、setter方法会得到或通过对可变对象的引用操作而暴露代码内部实现,解决方法很多,只要返回的或赋值的对象不是原引用对象即可。

例如:

以Date类型为例:

private java.util.Datefirstdate;

publicvoidsetFirstdate(java.util.Datevalue) {

       this.firstdate =value;

    }

    public java.util.DategetFirstdate() {

       returnthis.firstdate;

    }

改为:

public String getFirstdate() {

       returnfirstdate;

    }

    publicvoid setFirstdate(Stringfirstdate)
{

       this.firstdate =firstdate;

    }

 

三、 

Type : WMI_WRONG_MAP_ITERATOR

Category:PERFORMANCE(性能)

描述:使用keySet迭代器无效,请使用entrySet迭代器代替

解释:很多人都这样遍历Map,没错,但是效率很低,先一个一个的把key遍历,然后在根据key去查找value,这不是多此一举么,为什么不遍历entry(桶)然后直接从entry得到value呢?它们的执行效率大概为1.5:1(有人实际测试过)。

我们看看HashMap.get方法的源代码:

publicV get(Object
key) {

    if (key==null)

        returngetForNullKey();

    inthash=hash(key.hashCode());

    for (Entry<K,V>
e =table[indexFor(hash,table.length)];e
!=null;e =
e.next) {

        Object
k;

        if (e.hash ==hash&&
((k =e.key) ==
key ||
key.equals(k)))

            returne.value;

    }

    returnnull;

}

从这里可以看出查找value的原理,先计算出hashcode,然后散列表里取出entry,不管是计算hashcode,还是执行循环for以及执行equals方法,都是CPU密集运算,非常耗费CPU资源,如果对一个比较大的map进行遍历,会出现CPU迅速飚高的现象,直接影响机器的响应速度,在并发的情况下,简直就是一场灾难。

四、 

Type : SE_BAD_FIELD_STORE

Category:BAD_PRACTICE

描述:不可序列化的值存储在一个可序列化类的实例字段中

五、 

Type : SBSC_USE_STRINGBUFFER_CONCATENATION

Category:PERFORMANCE(性能)

描述:方法在一个循环中使用“+”运算符拼接字符串

解释:每次循环里的字符串+连接,都会新产生一个string对象,在java中,新建一个对象的代价是很昂贵的,特别是在循环语句中,效率较低。

例如:

六、

Type : RV_RETURN_VALUE_IGNORED_BAD_PRACTICE 

Category:BAD_PRACTICE

描述:方法忽略异常的返回值

解释:

关于一个方法逻辑执行是否成功,有两种方式:

一种是抛出异常,一种是提供boolean类型的返回值。举一个例子,用户登录,某些人将login方法的返回值定义为int,然后枚举出各个值的含义,比如0代表成功,1代表用户名不存在等等;而有些人,把这些枚举值看成是use case中的异常流,将它们定义为异常对象,遇到“异常”情况直接抛出异常从而实现分支的流程。第一种方式是典型的C语言面向过程风格,

第二种方式,带有强烈的面向对象味道,特别是java提供了checked Exception,貌似偏离主题了。

java中很多方法的执行成功依赖于异常的分支实现,但也有提供返回值的实现,比如这里的File.delete方法,上面的写法忽略了返回值(如果调用某个方法却不使用其返回值要特别注意),删除一个文件很可能不成功,但是从代码里并没有看到这一层面的意思。

解决方法:

文件删除不成功该怎么办?现在能处理就处理,现在不能处理就把父类的方法也改成有返回值的,然后向上传递,这跟处理异常的道理是一样的,当然,你也可以把它封装成一个异常对象。

例如:

 

七、 

Type : OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE

Category:EXPERIMENTAL

描述:在处理异常时,方法可能未能成功清理流或资源

八、 

Type : NP_NULL_ON_SOME_PATH_EXCEPTION

Category:CORRECTNESS

描述:方法中的异常路径上的可能的空指针解引用

例如:

九、 

Type : NP_LOAD_OF_KNOWN_NULL_VALUE

Category:STYLE

描述:加载已知为空的值

十、 

Type : NM_METHOD_NAMING_CONVENTION

Category:BAD_PRACTICE

描述:方法名应当以小写字母开头

十一、       

Type : NM_CLASS_NAMING_CONVENTION 

Category:BAD_PRACTICE

描述:类名应当以大写字母开头

十二、       

Type : EQ_DOESNT_OVERRIDE_EQUALS 

Category:STYLE

描述:类没有覆盖父类中的equals方法

十三、       

Type : EQ_COMPARETO_USE_OBJECT_EQUALS 

Category:BAD_PRACTICE

描述:类定义了compareTo(...)方法,使用了Object.equals()方法

解释:

没有使用instanceof判断就直接转型,有抛出classcastexception异常的可能。

这个BUG主题是,遵守约定(x.compareTo(y)==0) == (x.equals(y)),强烈建议,但不严格要求。

在return 0的时候,调用equals方法返回true,因为在PriorityQueue.remove方法中,1.5使用的是compareTo方法,而1.6使用的是equals方法,保证环境升级的时候,受影响最小。

解决方法:

         在return 0的时候,调用equals方法返回true

例如:

 

十四、       

Type : DMI_USING_REMOVEALL_TO_CLEAR_COLLECTION 

Category:BAD_PRACTICE

描述:不要使用removeAll方法清空一个集合

十五、       

Type : DM_NUMBER_CTOR 

Category:PERFORMANCE(性能)

描述:方法调用无效的Number构造器,请使用valueOf静态方法代替

十六、       

Type : DM_NEXTINT_VIA_NEXTDOUBLE

Category:PERFORMANCE(性能)

描述:为了生成一个随机整数,调用Random对象的nextInt方法,而不是nextDouble方法

十七、       

Type : DM_BOXED_PRIMITIVE_FOR_PARSING 

Category:PERFORMANCE(性能)

描述:使用封装/反封装来解析一个基本类型

例如1:

renturnRecord.setParts(Integer.valueOf(parts[i]));

处理:

renturnRecord.setParts(Integer.valueOf(parts[i]).intValue());

十八、     

Type : DLS_DEAD_LOCAL_STORE

Category:STYLE

描述:死存储局部向量

解释:

对本地变量定义了之后未使用到,编译器能够做优化处理,也就是在编译之后的class文件中删除这些本地变量。方法是在eclipse的Preferences里将以下的钩去除:
解决方法:
      大胆的去掉或者注释掉。
误报的案例:
是一个局部的变量,不需要定义到外部去,定义在外部,可能会变成一个无效的变量。

例如:

 

十九、     

Type : BX_UNBOXING_IMMEDIATELY_REBOXED  

Category:PERFORMANCE(性能)

描述:反封装已经封装的值,然后又立即重新封装

例如:

 

二十、     

Type : UUF_UNUSED_FIELD

Category:PERFORMANCE(性能)

描述:未使用字段

解释:这个警告应该影响不大吧!

例如:

 

Type :

Category:

描述:

例如:

时间: 2024-09-14 08:35:19

FindBugs Warnings 警告类型文档的相关文章

struts2上传下载,下载非txt类型文档后台报错,但文件成功下载了

问题描述 struts2上传下载,下载非txt类型文档后台报错,但文件成功下载了 下载非txt类型文档时后台报了个异常:(下载txt不报异常) java.lang.IllegalStateException: Cannot call sendError() after the response has been committed at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:451)

PMD Warnings 警告类型

PMD Warnings 警告类型 一. Type: UnusedModifier Category: Unused Code(未使用的代码) 二.导入(import) 的包未使用到 [Ctrl+Shift+O] Type: UnusedImports Category: Import Statements (import语句) 三.存在未被使用的私有成员变量 Type:UnusedPrivateField Category: Unused Code 四.有命名後没有使用的变量 Type:Unu

Delphi实现同类型文档自动合并

1.引言 最近,买了一张英语900句的学习光盘,因为没有相应的书面文字材料,就想自己将光盘中的文档提取出来,可一打开光盘,发现虽然每一句都有相应的详细文字材料,但每一句都单独存放在一个独立的RTF文档中(Sentence001.rtf至Sentence900.rtf),使用起来非常麻烦,于是就想将所有900句句型的文字材料合并到一起,即将900个独立的文档合并为一个文档. 2.解决方法 2.1 常规方法 首先想到的方法就是利用Word的文档合并功能,即将另一篇 Word 文档插入到当前打开的文档

Word文档生成

非常多的时候,都需要在程序当中生成一些文档,这些文档可能是csv,word,pdf,PPT,xls等文件格式. 生成csv还是比较简单的,但是要生成word,excel就麻烦多了. 当然,Tiny框架也面临这个问题,如何才能帮助开发人员快速生成这些文档呢? 一般来说,现在用java生成Word有如下方式: POI,iText,当然还有Xml形式. 对于采用POI,iText来说,要生成复杂的Doc文件,其实并不容易.而采用Xml结构生成,去把一个文档生成xml文件,看看里面的内容,估计也会是满头

研究 Java 中 XML 文档模型的特性和性能

xml|性能 Java 中的 XML: 文档模型,第一部分:性能 研究 Java 中 XML 文档模型的特性和性能 文档选项 将此页作为电子邮件发送 最新推荐 Java 应用开发源动力 - 下载免费软件,快速启动开发 级别: 初级 Dennis M. Sosnoski, 总裁, Sosnoski Software Solutions, Inc. 2001 年 9 月 01 日 在本文中,Java 顾问 Dennis Sosnoski 比较几个 Java 文档模型的性能和功能.当选择模型时,无法做

如何用 servlet 打开非 HTML 格式的文档(转)

servlet 如何用 servlet 打开非 HTML 格式的文档一种向 Web 客户端发送非 HTML 格式文档的简单方法By Marla Bonar(marla.bonar@javaworld.com) 摘要Java Servlet 编程可以很方便地将 HTML 文件发送到客户端 Web 浏览器.然而许多站点还允许访问非 HTML 格式的文档,包括 Adobe PDF.Microsoft Word 和 Micorsoft Excel 等.事实上这些非 HTML 格式只要能用 MIME 类型

在Java中轻松打印文档

有关在Java中实现文档打印的典型说法描述了一个复杂的过程,它要求对字 体进行测定.对文本进行解析并将结果绘制到一个Graphics对象中.这个过程似 乎执行起来相当困难,并且它和用于文档视频显示的高级编程方法不一致.如果 你想要花费大量的精力来完成这个过程,那么你就不会首先想到要在Java中编程 . 你一定不想自己完成测定.解析和绘制过程,而是希望通过简单地将文档发 送到一个能为你处理所有事情的对象中来完成这个任务.本文就将介绍这样一个 对象――DocumentRenderer,它将一个文档作

使用Word邮件合并创建并打印信函及其他文档

  如果希望创建一组文档(如一个寄给多个客户的套用信函或一个地址标签页),可以使用邮件合并.每个信函或标签含有同一类信息,但内容各不相同.例如,在致客户的多个信函中,可以对每个信函进行个性化,称呼每个客户的姓名.每个信函或标签中的唯一信息都来自数据源中的条目. 邮件合并过程需要执行以下所有步骤: 1.设置主文档.主文档包含的文本和图形会用于合并文档的所有版本.例如,套用信函中的寄信人地址或称呼语. 2.将文档连接到数据源.数据源是一个文件,它包含要合并到文档的信息.例如,信函收件人的姓名和地址.

如何在Office 2007文档转换PDF或者XPS格式

  方法一: 1.打开需要转换的office文档,并点击 Office 按钮 → 另存为 → PDF 或 XPS 如果保存类型没有PDF和XPS,请安装微软发布的插件: Office 2007中文版本安装:SaveAsPDFandXPS-ch Office 2007英文版本安装:SaveAsPDFandXPS 这些插件请在微软官网下载 谢谢 2.在 文件名 列表中键入或选择在文档或工作簿的名称. 3.在 保存类型 列表中选择 PDF 或 XPS类型文档即可. 注意:Excel文件默认保存当前工作