文档章节

FindBugs Warnings 警告类型文档

skyheng
 skyheng
发布于 2016/08/02 09:13
字数 1643
阅读 12
收藏 0
点赞 0
评论 0

FindBugs Warnings 警告类型文档

一、 

Type : EI_EXPOSE_REP

Category:MALICIOUS_CODE(恶意程序代码)

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

例如:

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)gettersetter方法会得到或通过对可变对象的引用操作而暴露代码内部实现,解决方法很多,只要返回的或赋值的对象不是原引用对象即可。

例如:

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:

描述:

例如:


本文转载自:http://blog.csdn.net/skychenjh/article/details/46010399

共有 人打赏支持
skyheng
粉丝 0
博文 18
码字总数 0
作品 0
深圳
程序员
Eclipse-Java代码规范和质量检查插件-FindBugs

FindBugs 是由马里兰大学提供的一款开源 Java静态代码分析工具。FindBugs通过检查类文件或 JAR文件,将字节码与一组缺陷模式进行对比从而发现代码缺陷,完成静态代码分析。FindBugs既提供可视...

easonjim ⋅ 2017/10/18 ⋅ 0

Android静态代码分析工具

原文地址:https://medium.com/mindorks/static-code-analysis-for-android-using-findbugs-pmd-and-checkstyle-3a2861834c6a 静态代码分析工具广泛用于Java开发,以改进代码库并识别潜在的漏...

小菜鸟程序媛 ⋅ 前天 ⋅ 0

Java静态检测工具/Java代码规范和质量检查简单介绍(转)

静态检查: 静态测试包括代码检查、静态结构分析、代码质量度量等。它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行。代码检查代码检查包括代码走查、桌面检查、代...

easonjim ⋅ 2017/10/18 ⋅ 0

java中遍历map的四种方法

1、最常见的并且在大多数情况下也是最可取的遍历方式 键值都需要时使用 2、for-each循环中遍历keys或values 通过keySet或values来实现遍历,而不是用entrySet 比entrySet遍历在性能上稍好(快...

职业搬砖20年 ⋅ 06/13 ⋅ 0

hadoop-2.6.4集群编译搭建-阿里云和腾讯云

腾讯云阿里云 hadoop集群编译搭建 环境准备 阿里云配置: 腾讯云配置: 创建用户 useradd hadoop passwd haddop jdk1.7安装: 下载:http://www.oracle.com/technetwork/java/javase/downloa...

lizer2016 ⋅ 2016/07/31 ⋅ 0

Jenkins的详细安装及使用

Jenkins的详细安装及使用 置顶2018年02月27日 10:20:43 阅读数:13578 操作环境:Windows 一、环境准备 1 安装JDK 本文采用jdk-8u111-windows-x64.exe; 2 配置tomcat 本文采用tomcat8,无需...

keppy ⋅ 05/25 ⋅ 0

FindBugs、PMD和CheckStyle对比

工具 目的 检查项 FindBugs 检查.class 基于Bug Patterns概念,查找javabytecode(.class文件)中的潜在bug。 它使用静态分析方法标识出Java程序中上百种潜在的不同类型的错误。 主要检查byt...

awesome@qa ⋅ 05/16 ⋅ 0

Jenkins+SonarQube6.5.5+SonarScanner2.5代码质量管理平台

Jenkins+SonarQube6.5.5+SonarScanner2.5代码质量管理平台 简介 Sonar是一个用于代码质量管理的开源平台,用于管理Java源代码的质量。通过插件机制,Sonar 可以集成不同的测试工具,代码分析...

awesome@qa ⋅ 05/16 ⋅ 0

基于Sonar推动DevOps流程中的代码质量优化

1、DevOps DevOps逐渐成为开发运维领域的一种趋势,对DevOps 的定义有很多种,但“自动化” 很可能是该定义的一部分。Continuous Integration(CI,持续集成)、Continuous Delivery(CD,持...

陈能技 ⋅ 2016/03/22 ⋅ 0

代码质量管理的开源平台Sonar QQ群522720170

点击链接加入QQ群 522720170(免费公开课、视频应有尽有):https://jq.qq.com/?wv=1027&k=5C08ATe 介绍 Sonar是一个用于代码质量管理的开源平台,用于管理Java源代码的质量。通过插件机制,...

小强测试帮 ⋅ 05/09 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

用ZBLOG2.3博客写读书笔记网站能创造今日头条的辉煌吗?

最近两年,著名的自媒体网站今日头条可以说是火得一塌糊涂,虽然从目前来看也遇到了一点瓶颈,毕竟发展到了一定的规模,继续增长就更加难了,但如今的今日头条规模和流量已经非常大了。 我们...

原创小博客 ⋅ 38分钟前 ⋅ 0

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 58分钟前 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 今天 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 今天 ⋅ 0

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 今天 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

Spring boot 项目打包及引入本地jar包

Spring Boot 项目打包以及引入本地Jar包 [TOC] 上篇文章提到 Maven 项目添加本地jar包的三种方式 ,本篇文章记录下在实际项目中的应用。 spring boot 打包方式 我们知道,传统应用可以将程序...

Os_yxguang ⋅ 昨天 ⋅ 0

常见数据结构(二)-树(二叉树,红黑树,B树)

本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自coursera上普林斯顿的课程《Algorithms, Part I》中的Slides 相关命题的证明可参考《算法(第...

浮躁的码农 ⋅ 昨天 ⋅ 0

android -------- 混淆打包报错 (warning - InnerClass ...)

最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations are missing corresponding EnclosingMember annotation......

切切歆语 ⋅ 昨天 ⋅ 0

eclipse酷炫大法之设置主题、皮肤

eclipse酷炫大法 目前两款不错的eclipse 1.系统设置 Window->Preferences->General->Appearance 2.Eclipse Marketplace下载【推荐】 Help->Eclipse Marketplace->搜索‘theme’进行安装 比如......

anlve ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部