Findbugs工具的使用

来源:互联网 发布:同步器软件 编辑:程序博客网 时间:2024/05/29 10:54

一、前言

为什么我们要引入findbugs工具的使用?

代码风险控制在于日常程序开发过程中是及其终于的一环。从项目开始到结束,除了需要开发人员依据公司给出的开发规范,还要在日常的学习过程中养成良好的编程习惯。比如,每个模块编写完成后需要对应的单元测试类来进行支撑。否则,在后期维护想针对某个具体的问题进行排查,耗费的不是一星半点的时间。

由此,我们发现,代码日常管理的难点和容易忽略的地方大概有如下几点:

  • 开发任务紧凑,没有多余的时间去进行代码的review;
  • 对自身代码过于自信,缺少团队间互相监督及探讨;
  • 没有具体的单元测试进行支撑,出了问题,需要从头开始编写;
  • 没有特定针对代码风险进行控制。

当然,代码的风险控制并不是要针对大家去说明编程能力强弱之分,主要是养成一个良好的代码风格。写程序犹如写诗,读起来清新,明了是每个编程人员应该追求的目标。在此,也推荐《code clean》一书。

二、findbugs介绍

FindBugs是一款针对Java代码错误扫描的工具。目前支持代码问题和错误,以及优化建议等报告。是目前比较流行的代码检查工具之一。

三、代码缺陷分类
在findbugs中,将诸多问题进行了归类和分级。主要有如下几种:
  1. Bad practice  不好的做法
  2. Correctness   可能有不正确
  3. Dodgy code     糟糕的代码
  4. Experimental  实验
  5. Internationalization  国际化
  6. Malicious code vulnerility 恶意的代码漏洞
  7. Multithreaded correctness 多线程问题
  8. Performance  性能问题
四、代码错误类型中英文对照表
rule.findbugs.IMSE_DONT_CATCH_IMSE.name
不良实践 - 捕获可疑IllegalMonitorStateException
rule.findbugs.BX_BOXING_IMMEDIATELY_UNBOXED.name
性能 - 基本类型包装之后立刻解包
rule.findbugs.IJU_SETUP_NO_SUPER.name
使用错误 - TestCase定义的setUp没有调用super.setUp()
rule.findbugs.TQ_ALWAYS_VALUE_USED_WHERE_NEVER_REQUIRED.name
使用错误 - 某个值使用了注解限制类型,但是这个限制永远不会发生
rule.findbugs.TLW_TWO_LOCK_WAIT.name
多线程错误 - 等待两个被持有的锁
rule.findbugs.RV_01_TO_INT.name
使用错误 - 0至1的随机数被当做整数0
rule.findbugs.NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE.name
高危 - 参数必须非null但是标记为可为null
rule.findbugs.RV_ABSOLUTE_VALUE_OF_RANDOM_INT.name
使用错误 - 尝试计算32位随机整数的绝对值
rule.findbugs.EC_INCOMPATIBLE_ARRAY_COMPARE.name
使用错误 - 使用equals()比较不兼容的数组
rule.findbugs.UL_UNRELEASED_LOCK_EXCEPTION_PATH.name
多线程错误 - 方法没有在所有异常路径释放锁
rule.findbugs.SE_NONSTATIC_SERIALVERSIONID.name
不良实践 - serialVersionUID不是static的
rule.findbugs.UCF_USELESS_CONTROL_FLOW.name
高危 - 无用控制流
rule.findbugs.BC_IMPOSSIBLE_CAST.name
使用错误 - 不可能的转换
rule.findbugs.XSS_REQUEST_PARAMETER_TO_SEND_ERROR.name
安全风险 - servlet的反射导致跨站脚本漏洞
rule.findbugs.DM_NEW_FOR_GETCLASS.name
性能 - 仅为了获得一个方法就创建了一个对象
rule.findbugs.OBL_UNSATISFIED_OBLIGATION.name
试验 - 方法可能在清理流或资源时失败
rule.findbugs.UW_UNCOND_WAIT.name
多线程错误 - 无条件等待
rule.findbugs.DLS_DEAD_LOCAL_STORE_OF_NULL.name
高危 - 把null设置给不会用到的局部变量
rule.findbugs.NM_CLASS_NAMING_CONVENTION.name
类名应该以大写字母开头
rule.findbugs.RC_REF_COMPARISON_BAD_PRACTICE_BOOLEAN.name
使用错误 - 怀疑对两个布尔值的引用进行比较
rule.findbugs.MWN_MISMATCHED_NOTIFY.name
多线程错误- 不匹配的notify()
rule.findbugs.NM_VERY_CONFUSING.name
错误 - 非常容易迷惑的方法名
rule.findbugs.FI_NULLIFY_SUPER.name
不良实践 - 空Finalizer禁用了超类的finalizer
rule.findbugs.MTIA_SUSPECT_STRUTS_INSTANCE_FIELD.name
高危 - 继承了struts Action的类使用了实例变量
rule.findbugs.DM_STRING_CTOR.name
性能 - 方法调用了效率很低的new String(String)构造方法
rule.findbugs.STCAL_INVOKE_ON_STATIC_DATE_FORMAT_INSTANCE.name
多线程错误 - 调用静态DateFormat
rule.findbugs.NP_NULL_PARAM_DEREF_NONVIRTUAL.name
使用错误 - 非虚拟方法调用向非空参数传入了null
rule.findbugs.FI_EMPTY.name
不良实践 - 应该删除空的finalizer
rule.findbugs.CD_CIRCULAR_DEPENDENCY.name
试验 - 类间存在循环引用
rule.findbugs.EC_UNRELATED_TYPES.name
使用错误 - 使用equals()比较不同类型
rule.findbugs.EI_EXPOSE_STATIC_REP2.name
恶意代码漏洞 - 把可变对象保存到静态字段中可能会暴露内部静态状态
rule.findbugs.DMI_INVOKING_TOSTRING_ON_ANONYMOUS_ARRAY.name
错误 - 对数组执行toString
rule.findbugs.SIC_INNER_SHOULD_BE_STATIC_ANON.name
性能 - 可以重构成一个静态内部类
rule.findbugs.STI_INTERRUPTED_ON_UNKNOWNTHREAD.name
错误 - 在thread实例上调用了静态Thread.interrupted()方法
rule.findbugs.CN_IDIOM_NO_SUPER_CALL.name
不良实践 - clone方法没有调用super.clone()
rule.findbugs.VA_FORMAT_STRING_BAD_ARGUMENT.name
错误用法 - 格式化字符串占位符与传入的参数不匹配
rule.findbugs.EQ_DOESNT_OVERRIDE_EQUALS.name
高危 - 类没有覆盖父类的equals方法
rule.findbugs.BC_IMPOSSIBLE_DOWNCAST_OF_TOARRAY.name
错误用法 - 集合转换为数组元素时发生的类型转换错误
rule.findbugs.SE_NO_SUITABLE_CONSTRUCTOR_FOR_EXTERNALIZATION.name
不良实践 - 类是可扩展的,但是没有提供无参数的构造方法
rule.findbugs.TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_ALWAYS_SINK.name
错误用法 - 数值需要类型标示,但是却标记为未知
rule.findbugs.SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS.name
性能 - 可以筹够成一个静态内部类
rule.findbugs.EQ_CHECK_FOR_OPERAND_NOT_COMPATIBLE_WITH_THIS.name
不良实践 - equals检测不兼容的参数操作
rule.findbugs.RV_RETURN_VALUE_OF_PUTIFABSENT_IGNORED.name
错误用法 - 忽略了putIfAbsent的返回值,传递给putIfAbsent的值被重用
rule.findbugs.STCAL_INVOKE_ON_STATIC_CALENDAR_INSTANCE.name
多线程错误 - 调用静态Calendar
rule.findbugs.MS_CANNOT_BE_FINAL.name
恶意代码漏洞 - 字段不是final的,不能防止恶意代码的攻击
rule.findbugs.IS_INCONSISTENT_SYNC.name
多线程错误 - 不一致的同步
rule.findbugs.SE_NO_SERIALVERSIONID.name
不良实践 - 类是可序列化的,但是没有定义serialVersionUID
rule.findbugs.EI_EXPOSE_REP2.name
恶意代码漏洞 - 可能暴露内部实现,通过与可变对象引用协作
rule.findbugs.NM_METHOD_CONSTRUCTOR_CONFUSION.name
错误用法 - 明显的方法/构造方法混淆
rule.findbugs.ICAST_INTEGER_MULTIPLY_CAST_TO_LONG.name
高危 - 整形乘法的结果转换为long型
rule.findbugs.QF_QUESTIONABLE_FOR_LOOP.name
高危 - for循环中存在复杂,微妙或者错误的自增
rule.findbugs.DLS_DEAD_STORE_OF_CLASS_LITERAL.name
错误用法 - 类中保存了无用字符
rule.findbugs.NM_FUTURE_KEYWORD_USED_AS_MEMBER_IDENTIFIER.name
不良实践 - 使用了未来Java版本中成为关键字的标识
rule.findbugs.BC_VACUOUS_INSTANCEOF.name
高危 - instanceof会一直返回true
rule.findbugs.INT_VACUOUS_BIT_OPERATION.name
高危 - 在整形上进行位操作时有一些位上出现空洞
rule.findbugs.NP_NULL_INSTANCEOF.name
错误用法 - 一个已知的null值被检测它是否是一个类型的实例
rule.findbugs.SIC_THREADLOCAL_DEADLY_EMBRACE.name
错误用法 - 非静态内部类和ThreadLocal的致命结合
rule.findbugs.EQ_UNUSUAL.name
高危 - 罕见的equals方法
rule.findbugs.IJU_NO_TESTS.name
错误用法 - TestCase没有任何测试
rule.findbugs.EQ_OVERRIDING_EQUALS_NOT_SYMMETRIC.name
错误用法 - equals方法覆盖了父类的equals可能功能不符
rule.findbugs.XFB_XML_FACTORY_BYPASS.name
高危 - 方法直接调用了xml接口的一个具体实现
rule.findbugs.SWL_SLEEP_WITH_LOCK_HELD.name
多线程错误 - 方法在获得锁时调用了Thread.sleep()
rule.findbugs.CN_IDIOM.name
不良实践 - 类实现了Cloneable ,但是没有定义或使用clone方法
rule.findbugs.WA_AWAIT_NOT_IN_LOOP.name
多线程错误 - 未在循环中使用的Condition.await()
rule.findbugs.DM_FP_NUMBER_CTOR.name
性能 - 方法调用了低效的浮点书构造方法;应该使用静态的valueOf代替
rule.findbugs.SF_SWITCH_NO_DEFAULT.name
Switch语句中没有包含default
rule.findbugs.NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE.name
高危 - 调用返回返回值可能出现null值
rule.findbugs.NP_CLONE_COULD_RETURN_NULL.name
不良实践 - Clone方法可能返回null
rule.findbugs.MS_OOI_PKGPROTECT.name
恶意代码漏洞 - 属性应该从接口中移除并将访问权限设置为包保护
rule.findbugs.DM_BOXED_PRIMITIVE_TOSTRING.name
性能 - 方法使用了装箱的基本类型只为了调用toString
rule.findbugs.EQ_ABSTRACT_SELF.name
不良实践 - 抽象类定义了协变的equals方法
rule.findbugs.DM_STRING_TOSTRING.name
性能 - 方法调用了String的toString()方法
rule.findbugs.SE_METHOD_MUST_BE_PRIVATE.name
错误用法 - 方法必须是private的为了让序列化正常工作
rule.findbugs.DL_SYNCHRONIZATION_ON_BOOLEAN.name
多线程错误 - 在Boolean上使用同步可能导致死锁
rule.findbugs.UWF_UNWRITTEN_FIELD.name
错误用法 - 未赋值属性
rule.findbugs.IS2_INCONSISTENT_SYNC.name
多线程错误 - 不一致的同步
rule.findbugs.IM_AVERAGE_COMPUTATION_COULD_OVERFLOW.name
高危 - 计算平均值可能溢出
rule.findbugs.BIT_SIGNED_CHECK_HIGH_BIT.name
错误用法 - 检查位运算的符号
rule.findbugs.FL_MATH_USING_FLOAT_PRECISION.name
错误用法 - 方法进行数学运算时使用了浮点数的精度
rule.findbugs.WS_WRITEOBJECT_SYNC.name
多线程错误 - 类的writeObject()方法是同步的,但是没有做其他事情
rule.findbugs.RV_RETURN_VALUE_IGNORED.name
错误用法 - 方法忽略了返回值
rule.findbugs.SQL_NONCONSTANT_STRING_PASSED_TO_EXECUTE.name
安全风险 - 非常量的字符串传递给方法执行SQL语句
rule.findbugs.JCIP_FIELD_ISNT_FINAL_IN_IMMUTABLE_CLASS.name
不良实践 - 不可变的类的属性应该是final
rule.findbugs.AM_CREATES_EMPTY_ZIP_FILE_ENTRY.name
不良实践 - 创建了一个空的zip文件的入口
rule.findbugs.DM_NEXTINT_VIA_NEXTDOUBLE.name
性能 - 使用Random的nextInt方法来获得一个随机整数,而不是nextDouble
rule.findbugs.UI_INHERITANCE_UNSAFE_GETRESOURCE.name
不良实践 - 如果类被扩展,GetResource的使用可能就是不安全的
rule.findbugs.SIO_SUPERFLUOUS_INSTANCEOF.name
错误用法 - 不必要的类型检测使用instanceof操作符
rule.findbugs.EQ_OTHER_NO_OBJECT.name
错误用法 - equals()方法定义,但是没有覆盖equals(Object)
rule.findbugs.USM_USELESS_ABSTRACT_METHOD.name
试验 - 抽象方法已经在实现的接口中定义了
rule.findbugs.MTIA_SUSPECT_SERVLET_INSTANCE_FIELD.name
高危 - 扩展Servlet的类使用了实例变量
rule.findbugs.DM_USELESS_THREAD.name
多线程错误 - 使用默认的空run方法创建了一个线程
rule.findbugs.ML_SYNC_ON_UPDATED_FIELD.name
多线程错误 - 方法在一个修改了的属性上进行了同步
rule.findbugs.CO_SELF_NO_OBJECT.name
不良实践 - 协变的compareTo()定义
rule.findbugs.BC_UNCONFIRMED_CAST.name
高危 - 未检查/未证实的类型转换
rule.findbugs.FI_FINALIZER_NULLS_FIELDS.name
不良实践 - Finalizer空属性
rule.findbugs.BIT_AND.name
错误用法 - 不兼容的位掩码(BIT_AND)
rule.findbugs.FE_FLOATING_POINT_EQUALITY.name
高危 - 测试浮点数相等
rule.findbugs.TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_NEVER_SINK.name
错误用法 - 值不要求有类型标示,但是标记为未知
rule.findbugs.NP_NULL_PARAM_DEREF.name
错误用法 - 方法调用把null传递给一个非null参数
rule.findbugs.FB_MISSING_EXPECTED_WARNING.name
试验 - findbugs丢失了期待或需要的警告
rule.findbugs.DMI_INVOKING_HASHCODE_ON_ARRAY.name
错误用法 - 在数组上调用了hashCode
rule.findbugs.QBA_QUESTIONABLE_BOOLEAN_ASSIGNMENT.name
错误用法 - 方法在布尔表达式中分配了boolean文字
rule.findbugs.SA_FIELD_SELF_COMPARISON.name
错误用法 - 属性自己与自己进行了比较
rule.findbugs.UR_UNINIT_READ_CALLED_FROM_SUPER_CONSTRUCTOR.name
错误用法 - 父类的构造方法调用未初始化属性的方法
rule.findbugs.ES_COMPARING_PARAMETER_STRING_WITH_EQ.name
不良实践 - 比较字符串参数使用了 

或 !


rule.findbugs.INT_BAD_COMPARISON_WITH_NONNEGATIVE_VALUE.name
错误用法 - 错误比较非负值与负数
rule.findbugs.INT_BAD_COMPARISON_WITH_SIGNED_BYTE.name
错误用法 - 错误比较带符号的byte
rule.findbugs.IO_APPENDING_TO_OBJECT_OUTPUT_STREAM.name
错误用法 - 尝试向一个对象输出流添加信息
rule.findbugs.FI_MISSING_SUPER_CALL.name
不良实践 - Finalizer没有调用父类的finalizer
rule.findbugs.VA_FORMAT_STRING_EXTRA_ARGUMENTS_PASSED.name
错误用法 - 传递了多余实际使用的格式化字符串的参数
rule.findbugs.HE_EQUALS_USE_HASHCODE.name
不良实践 - 类定义了equals(),但使用了Object.hashCode()
rule.findbugs.IJU_BAD_SUITE_METHOD.name
错误用法 - TestCase声明了一个错误的suite方法
rule.findbugs.DMI_CONSTANT_DB_PASSWORD.name
安全风险 - 硬编码了数据库密码
rule.findbugs.REC_CATCH_EXCEPTION.name
高危 - 捕获了没有抛出的异常
rule.findbugs.PS_PUBLIC_SEMAPHORES.name
高危 - 类在公用接口中暴露了同步和信号
rule.findbugs.EC_UNRELATED_INTERFACES.name
错误用法 - 调用equals()比较不同的接口类型
rule.findbugs.UCF_USELESS_CONTROL_FLOW_NEXT_LINE.name
错误用法 - 执行到下一行的无用流程控制
rule.findbugs.LG_LOST_LOGGER_DUE_TO_WEAK_REFERENCE.name
试验 - OpenJDK中存在潜在的丢失logger的风险,因为弱引用
rule.findbugs.NP_UNWRITTEN_FIELD.name
错误用法 - 读取未初始化的属性
rule.findbugs.DMI_UNSUPPORTED_METHOD.name
高危 - 调用不支持的方法
rule.findbugs.RCN_REDUNDANT_COMPARISON_OF_NULL_AND_NONNULL_VALUE.name
高危 - 重复比较非空值和null
rule.findbugs.EC_BAD_ARRAY_COMPARE.name
错误用法 - 调用equals(),与


效果一样
rule.findbugs.EI_EXPOSE_REP.name
恶意代码漏洞 - 可能通过返回一个可变对象的引用暴露了内部实现
rule.findbugs.NP_DEREFERENCE_OF_READLINE_VALUE.name
高危 - 没有判断readLine()的结果是否为空
rule.findbugs.UPM_UNCALLED_PRIVATE_METHOD.name
性能 - 从未用到的私有方法
rule.findbugs.NP_NULL_ON_SOME_PATH.name
错误用法 - 可能出现空指针引用
rule.findbugs.NP_EQUALS_SHOULD_HANDLE_NULL_ARGUMENT.name
不良实践 - equals()方法没有检测null参数
rule.findbugs.EC_NULL_ARG.name
错误用法 - 使用空参数调用equals()
rule.findbugs.SE_BAD_FIELD_STORE.name
不良实践 - 非序列化值保存在序列化类的实例变量中
rule.findbugs.VO_VOLATILE_REFERENCE_TO_ARRAY.name
多线程错误 - 数组的volatile引用不会把数组元素也当做volatile来引用
rule.findbugs.NP_SYNC_AND_NULL_CHECK_FIELD.name
多线程错误 - 同步和空值检测发生在同一个属性上
rule.findbugs.DM_EXIT.name
不良实践 - 方法调用了System.exit(...)
rule.findbugs.RC_REF_COMPARISON.name
不良实践 - 怀疑进行了引用比较
rule.findbugs.SE_NO_SUITABLE_CONSTRUCTOR.name
不良实践 - 类是可序列化的,但是父类没有定义无参数构造方法
rule.findbugs.DC_DOUBLECHECK.name
多线程错误 - 可能对属性进行了双重检测
rule.findbugs.DMI_LONG_BITS_TO_DOUBLE_INVOKED_ON_INT.name
错误用法 - 在int上调用了Double.longBitsToDouble
rule.findbugs.RpC_REPEATED_CONDITIONAL_TEST.name
错误用法 - 重复判断条件
rule.findbugs.WMI_WRONG_MAP_ITERATOR.name
性能 - keySet迭代是低效的,使用entrySet代替
rule.findbugs.DLS_DEAD_LOCAL_STORE.name
高危 - 未用的局部变量
rule.findbugs.INT_BAD_REM_BY_1.name
错误用法 - 整数剩余模1
rule.findbugs.RV_RETURN_VALUE_IGNORED_BAD_PRACTICE.name
不良实践 - 方法忽略异常返回值
rule.findbugs.SA_LOCAL_SELF_ASSIGNMENT.name
高危 - 局部变量的自我赋值
rule.findbugs.MS_SHOULD_BE_FINAL.name
恶意代码漏洞 - 属性不是final,但是应该设置成final
rule.findbugs.SIC_INNER_SHOULD_BE_STATIC.name
性能 - 应该是一个静态内部类
rule.findbugs.NP_GUARANTEED_DEREF.name
错误用法 - null值一定会被调用
rule.findbugs.SE_READ_RESOLVE_MUST_RETURN_OBJECT.name
不良实践 - readResolve方法必须返回Object
rule.findbugs.NP_LOAD_OF_KNOWN_NULL_VALUE.name
高危 - 加载了已知的null值
rule.findbugs.BX_BOXING_IMMEDIATELY_UNBOXED_TO_PERFORM_COERCION.name
性能 - 基本数据被装箱又被拆箱
rule.findbugs.CN_IMPLEMENTS_CLONE_BUT_NOT_CLONEABLE.name
不良实践 - 类定义了clone()但没有实现Cloneable
rule.findbugs.CO_ABSTRACT_SELF.name
不良实践 - 抽象类定义了协变的compareTo()方法
rule.findbugs.BAC_BAD_APPLET_CONSTRUCTOR.name
试验 - 错误的Applet构造方法依赖未初始化的AppletStub
rule.findbugs.EQ_GETCLASS_AND_CLASS_CONSTANT.name
不良实践 - equals方法因为子类失败
rule.findbugs.DB_DUPLICATE_SWITCH_CLAUSES.name
高危 - 在两个switch语句中使用了相同的代码
rule.findbugs.DB_DUPLICATE_BRANCHES.name
高危 - 在两个分支中使用了相同的代码
rule.findbugs.UOE_USE_OBJECT_EQUALS.name
试验 - 在final类上调用了equals,但是没有覆盖Object的equals方法
rule.findbugs.FI_USELESS.name
不良实践 - Finalizer除了调用父类的finalizer以外什么也没做
rule.findbugs.NP_ALWAYS_NULL.name
错误用法 - 调用了null指针
rule.findbugs.DMI_VACUOUS_SELF_COLLECTION_CALL.name
错误用法 - 集合的调用不能被感知
rule.findbugs.DLS_DEAD_LOCAL_STORE_IN_RETURN.name
错误用法 - 返回语句中的无用的赋值
rule.findbugs.IJU_ASSERT_METHOD_INVOKED_FROM_RUN_METHOD.name
错误用法 - 在run方法中的JUnit检验不能报告给JUnit
rule.findbugs.DMI_EMPTY_DB_PASSWORD.name
安全风险 - 空的数据库密码
rule.findbugs.DM_BOOLEAN_CTOR.name
性能 - 方法调用了低效的Boolean构造方法;使用Boolean.valueOf(...)代替
rule.findbugs.BC_IMPOSSIBLE_DOWNCAST.name
错误用法 - 不可能转型
rule.findbugs.BC_EQUALS_METHOD_SHOULD_WORK_FOR_ALL_OBJECTS.name
不良实践 - Equals方法不应该假设任何有关参数类型的事宜
rule.findbugs.RV_EXCEPTION_NOT_THROWN.name
错误用法 - 异常创建后就丢弃了,没有抛出
rule.findbugs.VA_PRIMITIVE_ARRAY_PASSED_TO_OBJECT_VARARG.name
错误用法 - 基本类型数组传递给一个期待可变对象类型参数的方法
rule.findbugs.LI_LAZY_INIT_UPDATE_STATIC.name
多线程错误 - 错误的延迟初始化和更新静态属性
rule.findbugs.SA_FIELD_SELF_ASSIGNMENT.name
错误用法 - 属性自身赋值
rule.findbugs.EQ_ALWAYS_FALSE.name
错误用法 - equals方法一直返回false
rule.findbugs.DMI_RANDOM_USED_ONLY_ONCE.name
不良实践 - Random对象创建后只用了一次
rule.findbugs.NM_CLASS_NOT_EXCEPTION.name
不良实践 - Class没有继承Exception,虽然名字像一个异常
rule.findbugs.SA_LOCAL_DOUBLE_ASSIGNMENT.name
高危 - 给局部变量双重赋值
rule.findbugs.NP_NULL_PARAM_DEREF_ALL_TARGETS_DANGEROUS.name
错误用法 - 方法调用传递null给非空参数 (ALL_TARGETS_DANGEROUS)
rule.findbugs.NP_TOSTRING_COULD_RETURN_NULL.name
不良实践 - toString方法可能返回null
rule.findbugs.BC_BAD_CAST_TO_ABSTRACT_COLLECTION.name
高危 - 转换成抽象集合值得怀疑
rule.findbugs.NM_LCASE_HASHCODE.name
类定义了hashcode(); 应该是hashCode()吧?
rule.findbugs.RU_INVOKE_RUN.name
多线程错误 - 在线程中调用了run(你的意思是再启动一次么?)
rule.findbugs.DMI_INVOKING_TOSTRING_ON_ARRAY.name
错误用法 - 调用了数组的toString
rule.findbugs.NM_METHOD_NAMING_CONVENTION.name
方法名应该以小写字母开头
rule.findbugs.RCN_REDUNDANT_COMPARISON_TWO_NULL_VALUES.name
高危 - 重复比较两个null值
rule.findbugs.SA_LOCAL_SELF_COMPUTATION.name
错误用法 - 对一个变量进行无意义的自我计算 (比如 x & x)
rule.findbugs.MS_MUTABLE_HASHTABLE.name
恶意代码漏洞 - 属性是可变的Hashtable
rule.findbugs.RV_DONT_JUST_NULL_CHECK_READLINE.name
高危 - 方法丢掉了readLine的结果,在检测它是非空之后。
rule.findbugs.ES_COMPARING_STRINGS_WITH_EQ.name
不良实践 - 使用


 或 !
比较String
rule.findbugs.DL_SYNCHRONIZATION_ON_SHARED_CONSTANT.name
多线程错误 - 同步内部String可能导致死锁
rule.findbugs.MF_METHOD_MASKS_FIELD.name
错误用法 - 方法定义了一个变量,与实例变量同名。
rule.findbugs.EQ_SELF_USE_OBJECT.name
错误用法 - 协变equals()方法定义,继承了Object.equals(Object)
rule.findbugs.ICAST_INT_CAST_TO_FLOAT_PASSED_TO_ROUND.name
错误用法 - int值转换成float,然后传递给Math.round
rule.findbugs.GC_UNRELATED_TYPES.name
错误用法 - 泛型参数与方法参数没有相互关系
rule.findbugs.BC_IMPOSSIBLE_INSTANCEOF.name
错误用法 - instanceof一直返回false
rule.findbugs.SBSC_USE_STRINGBUFFER_CONCATENATION.name
性能 - 方法在循环中使用+进行字符串拼接
rule.findbugs.ICAST_INT_CAST_TO_DOUBLE_PASSED_TO_CEIL.name
错误用法 - int转换成double,然后传递给Math.ceil
rule.findbugs.UG_SYNC_SET_UNSYNC_GET.name
多线程错误 - 未同步的getter方法,同步的setter方法
rule.findbugs.RE_BAD_SYNTAX_FOR_REGULAR_EXPRESSION.name
错误用法 - 非法的正则表达式
rule.findbugs.SA_FIELD_SELF_COMPUTATION.name
错误用法 - 无意义的自我计算 (比如 x & x)
rule.findbugs.DMI_SCHEDULED_THREAD_POOL_EXECUTOR_WITH_ZERO_CORE_THREADS.name
错误用法 - 创建了没有任何线程的ScheduledThreadPoolExecutor
rule.findbugs.DMI_USELESS_SUBSTRING.name
高危 - 调用substring(0)会返回原值
rule.findbugs.IA_AMBIGUOUS_INVOCATION_OF_INHERITED_OR_OUTER_METHOD.name
高危 - 被继承的或外部的方法的模棱两可的调用
rule.findbugs.OS_OPEN_STREAM.name
不良实践 - 方法可能在关闭流时失败
rule.findbugs.HE_INHERITS_EQUALS_USE_HASHCODE.name
不良实践 - 类继承了equals(),但使用了Object.hashCode()
rule.findbugs.SE_NONFINAL_SERIALVERSIONID.name
不良实践 - serialVersionUID不是final的
rule.findbugs.EQ_SELF_NO_OBJECT.name
不良实践 - 协变equals()方法定义
rule.findbugs.SF_DEAD_STORE_DUE_TO_SWITCH_FALLTHROUGH.name
由于switch语句导致的无用存储
rule.findbugs.SW_SWING_METHODS_INVOKED_IN_SWING_THREAD.name
不良实践 - 某些swing方法需要在swing线程中调用
rule.findbugs.VA_FORMAT_STRING_ILLEGAL.name
错误用法 - 非法的格式化字符串
rule.findbugs.DM_NUMBER_CTOR.name
性能 - 方法调用低效的数字构造方法;使用静态valueOf代替
rule.findbugs.RV_REM_OF_RANDOM_INT.name
高危 - 其余32位带符号随机整数
rule.findbugs.EQ_COMPARING_CLASS_NAMES.name
错误用法 - equals方法比较类名而不是比较类
rule.findbugs.ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD.name
高危 - 通过一个实例方法更新静态属性
rule.findbugs.TQ_NEVER_VALUE_USED_WHERE_ALWAYS_REQUIRED.name
错误用法 - 某个值使用了注解标记不会限制类型,但是这个限制是必须的
rule.findbugs.NS_NON_SHORT_CIRCUIT.name
高危 - 可疑的非短路逻辑
rule.findbugs.VA_FORMAT_STRING_NO_PREVIOUS_ARGUMENT.name
错误用法 - 格式化字符串没有前面的参数
rule.findbugs.SE_PRIVATE_READ_RESOLVE_NOT_INHERITED.name
高危 - 私有readResolve方法不是继承自父类
rule.findbugs.RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE.name
高危 - 对一个已知不是null的值重复进行空值判断
rule.findbugs.NM_LCASE_TOSTRING.name
类定义了tostring(); 应该是toString()吧?
rule.findbugs.HSC_HUGE_SHARED_STRING_CONSTANT.name
性能 - 巨大的字符串常量在多个类文件中间重复了
rule.findbugs.SE_TRANSIENT_FIELD_NOT_RESTORED.name
不良实践 - Transient属性没有再反序列化时被设置
rule.findbugs.JLM_JSR166_LOCK_MONITORENTER.name
多线程错误 - 在java.util.concurrent Lock上进行了同步
rule.findbugs.EQ_ALWAYS_TRUE.name
错误用法 - equals方法总是返回true
rule.findbugs.ISC_INSTANTIATE_STATIC_CLASS.name
不良实践 - 只提供静态方法的类不需要实例化
rule.findbugs.ICAST_IDIV_CAST_TO_DOUBLE.name
高危 - int相除的结果转换成double或float
rule.findbugs.RC_REF_COMPARISON_BAD_PRACTICE.name
错误用法 - 可疑的引用与常量的比较
rule.findbugs.FI_EXPLICIT_INVOCATION.name
不良实践 - 直接调用finalizer
rule.findbugs.ESync_EMPTY_SYNC.name
多线程错误 - 空的同步块
rule.findbugs.DMI_USING_REMOVEALL_TO_CLEAR_COLLECTION.name
错误用法 - 不要使用removeAll清空集合
rule.findbugs.SE_BAD_FIELD.name
在序列化类中出现了非transient也非serializable的实例属性
rule.findbugs.NP_STORE_INTO_NONNULL_FIELD.name
错误用法 - 属性已经标记为NonNull,但是设置了一个null值
rule.findbugs.IT_NO_SUCH_ELEMENT.name
不良实践 - 迭代器的next()方法不能抛出NoSuchElementException
rule.findbugs.HRS_REQUEST_PARAMETER_TO_HTTP_HEADER.name
安全风险 - HTTP响应拆分漏洞
rule.findbugs.DMI_THREAD_PASSED_WHERE_RUNNABLE_EXPECTED.name
高危 - 希望传入Runnable的地方传入了一个Thread
rule.findbugs.NP_GUARANTEED_DEREF_ON_EXCEPTION_PATH.name
错误用法 - null值会在exception处理中被用到
rule.findbugs.RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE.name
高危 - 已知的null值被重复的检测
rule.findbugs.DMI_CALLING_NEXT_FROM_HASNEXT.name
错误用法 - hasNext方法调用了next方法
rule.findbugs.HE_HASHCODE_USE_OBJECT_EQUALS.name
不良实践 - 定义了hashCode()的类使用了Object.equals()
rule.findbugs.VA_FORMAT_STRING_EXPECTED_MESSAGE_FORMAT_SUPPLIED.name
错误用法 - 需要使用printf样式时使用了MessageFormat
rule.findbugs.NP_BOOLEAN_RETURN_NULL.name
不良实践 - 方法返回boolean类型返回了null
rule.findbugs.RI_REDUNDANT_INTERFACES.name
高危 - 类实现了父类一样的接口
rule.findbugs.DL_SYNCHRONIZATION_ON_UNSHARED_BOXED_PRIMITIVE.name
多线程错误 - 在装箱的基本属性上使用了同步
rule.findbugs.STCAL_STATIC_CALENDAR_INSTANCE.name
多线程错误 - 静态Calendar
rule.findbugs.RR_NOT_CHECKED.name
不良实践 - 方法忽略InputStream.read()的返回值
rule.findbugs.IL_INFINITE_RECURSIVE_LOOP.name
错误用法 - 明显的无限递归循环
rule.findbugs.DMI_NONSERIALIZABLE_OBJECT_WRITTEN.name
高危 - 非持久化的对象写入了ObjectOutput
rule.findbugs.GC_UNCHECKED_TYPE_IN_GENERIC_CALL.name
不良实践 - 泛型调用中使用了未检查的类型
rule.findbugs.IMA_INEFFICIENT_MEMBER_ACCESS.name
试验 - 方法访问了一个拥有的类的私有成员
rule.findbugs.FI_PUBLIC_SHOULD_BE_PROTECTED.name
恶意代码漏洞 - Finalizer应该是protected,不能是public
rule.findbugs.RV_CHECK_FOR_POSITIVE_INDEXOF.name
高危 - 方法检查检查String.indexOf的结果是否为正数
rule.findbugs.ICAST_QUESTIONABLE_UNSIGNED_RIGHT_SHIFT.name
高危 - 无符号右移转换为short/byte
rule.findbugs.DM_STRING_VOID_CTOR.name
性能 - 方法调用了低效的new String()构造方法
rule.findbugs.RE_POSSIBLE_UNINTENDED_PATTERN.name
错误用法 - "."用作正则表达式
rule.findbugs.WL_USING_GETCLASS_RATHER_THAN_CLASS_LITERAL.name
多线程错误 - 在getClass上使用同步而不是在class文字上
rule.findbugs.ICAST_BAD_SHIFT_AMOUNT.name
错误用法 - 右移的数值不在0..31范围内
rule.findbugs.SF_SWITCH_FALLTHROUGH.name
Switch语句中一个case失败以后进入了下一个case
rule.findbugs.DP_DO_INSIDE_DO_PRIVILEGED.name
不良实践 - 方法调用应该在doPrivileged块中
rule.findbugs.NO_NOTIFY_NOT_NOTIFYALL.name
多线程错误 - 使用notify()而不是notifyAll()
rule.findbugs.SS_SHOULD_BE_STATIC.name
性能 - 未读取的属性:这个属性是否应该是static的?
rule.findbugs.DM_RUN_FINALIZERS_ON_EXIT.name
不良实践 - 方法调用了危险的runFinalizersOnExit方法
rule.findbugs.MS_FINAL_PKGPROTECT.name
恶意代码漏洞 - 属性应该同时是final 和 package protected的
rule.findbugs.BC_BAD_CAST_TO_CONCRETE_COLLECTION.name
高危 - 转换成具体集合可能有问题
rule.findbugs.BIT_IOR_OF_SIGNED_BYTE.name
错误用法 - 在带符号的byte值上进行位OR运算
rule.findbugs.MSF_MUTABLE_SERVLET_FIELD.name
多线程错误 - 可变的servlet属性
rule.findbugs.SE_BAD_FIELD_INNER_CLASS.name
不良实践 - 非serializable类有一个可序列化的内部类
rule.findbugs.BIT_ADD_OF_SIGNED_BYTE.name
错误用法 - 在带符号的byte值上进行位add运算
rule.findbugs.FI_FINALIZER_ONLY_NULLS_FIELDS.name
不良实践 - Finalizer中子还有null属性
rule.findbugs.DE_MIGHT_IGNORE.name
不良实践 - 方法可能忽略异常
rule.findbugs.XSS_REQUEST_PARAMETER_TO_SERVLET_WRITER.name
安全风险 - Servlet反射跨域脚本漏洞
rule.findbugs.ML_SYNC_ON_FIELD_TO_GUARD_CHANGING_THAT_FIELD.name
多线程错误 - 使用同步的属性可能发生改变
rule.findbugs.SQL_BAD_PREPARED_STATEMENT_ACCESS.name
错误用法 - 方法尝试访问PreparedStatement参数的索引是0
rule.findbugs.DM_CONVERT_CASE.name
国际化 - 考虑使用国际化参数型的调用方法版本
rule.findbugs.SE_TRANSIENT_FIELD_OF_NONSERIALIZABLE_CLASS.name
高危 - 类的transient属性不能序列化
rule.findbugs.NN_NAKED_NOTIFY.name
多线程错误 - 未使用同步包裹的notify
rule.findbugs.VA_FORMAT_STRING_MISSING_ARGUMENT.name
错误用法 - 格式化字符串引用的参数丢失
rule.findbugs.IC_SUPERCLASS_USES_SUBCLASS_DURING_INITIALIZATION.name
不良实践 - 父类初始化时使用了子类
rule.findbugs.SA_LOCAL_SELF_COMPARISON.name
错误用法 - 自己和自己的值比较
rule.findbugs.IM_BAD_CHECK_FOR_ODD.name
高危 - 对奇偶判断不能用于负数
rule.findbugs.NP_CLOSING_NULL.name
错误用法 - close()调用了一个永远是null的值
rule.findbugs.XSS_REQUEST_PARAMETER_TO_JSP_WRITER.name
安全风险 - JSP反射调用跨域脚本漏洞
rule.findbugs.IS_FIELD_NOT_GUARDED.name
多线程错误 - 属性不能保证同步访问
rule.findbugs.DM_GC.name
性能 - 直接调用垃圾回收,特别是在性能测试中的可疑代码
rule.findbugs.IM_MULTIPLYING_RESULT_OF_IREM.name
错误用法 - 整数乘法的结果是整数
rule.findbugs.SE_COMPARATOR_SHOULD_BE_SERIALIZABLE.name
不良实践 - Comparator没有实现Serializable
rule.findbugs.HE_HASHCODE_NO_EQUALS.name
不良实践 - 类定义了hashCode()但是没定义equals()
rule.findbugs.MF_CLASS_MASKS_FIELD.name
错误用法 - 类定义了属性覆盖了父类的属性
rule.findbugs.NM_VERY_CONFUSING_INTENTIONAL.name
不良实践 - 非常迷惑的方法名称(可能是内部方法)
rule.findbugs.SR_NOT_CHECKED.name
不良实践 - 方法忽略了InputStream.skip()的结果
rule.findbugs.LI_LAZY_INIT_STATIC.name
多线程错误 - 错误的对static属性进行了延迟初始化
rule.findbugs.DMI_ANNOTATION_IS_NOT_VISIBLE_TO_REFLECTION.name
错误用法 - 不能使用反射检测没有标记为runtime rentention的注解的存在
rule.findbugs.ODR_OPEN_DATABASE_RESOURCE_EXCEPTION_PATH.name
不良实践 - 方法可能在关闭database资源时因为异常失败
rule.findbugs.BIT_IOR.name
错误用法 - 不兼容的位掩码(BIT_IOR)
rule.findbugs.ODR_OPEN_DATABASE_RESOURCE.name
不良实践 - 方法可能在关闭database资源时失败
rule.findbugs.IP_PARAMETER_IS_DEAD_BUT_OVERWRITTEN.name
错误用法 - 参数没有被使用,但是被重新赋值了
rule.findbugs.SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCONSTANT_STRING.name
安全风险 - 使用非常量字符串创建了一个PreparedStatement
rule.findbugs.UUF_UNUSED_FIELD.name
性能 - 无用的属性
rule.findbugs.RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE.name
错误用法 - 对一个已经使用的值进行了null检测
rule.findbugs.EQ_OTHER_USE_OBJECT.name
错误用法 - equals()方法定义没有覆盖Object.equals(Object)
rule.findbugs.SP_SPIN_ON_FIELD.name
多线程错误 - 方法对一个属性循环复制
rule.findbugs.SI_INSTANCE_BEFORE_FINALS_ASSIGNED.name
不良实践 - 在所有静态final属性赋值之前static初始化块创建了一个实例
rule.findbugs.NP_ALWAYS_NULL_EXCEPTION.name
错误用法 - 方法的异常路径中引用了空指针
rule.findbugs.MS_EXPOSE_REP.name
恶意代码漏洞 - Public static方法可能因为返回了一个数组而暴露内部实现
rule.findbugs.VA_FORMAT_STRING_BAD_CONVERSION_TO_BOOLEAN.name
高危 - 非布尔参数使用%b进行了格式化
rule.findbugs.MS_PKGPROTECT.name
恶意代码漏洞 - 属性应该是package protected
rule.findbugs.NP_NONNULL_RETURN_VIOLATION.name
错误用法 - 方法可能返回null,但是声明了 @NonNull
rule.findbugs.J2EE_STORE_OF_NON_SERIALIZABLE_OBJECT_INTO_SESSION.name
不良实践 - 在HttpSession中保存了不可序列化的对象
rule.findbugs.NM_SAME_SIMPLE_NAME_AS_SUPERCLASS.name
不良实践 - 类名不应该和父类的名称相同
rule.findbugs.DMI_BLOCKING_METHODS_ON_URL.name
性能 - URL的equals 和 hashCode 方法会被堵塞
rule.findbugs.HE_SIGNATURE_DECLARES_HASHING_OF_UNHASHABLE_CLASS.name
错误用法 - 在哈希构造中声明了不能哈希的类
rule.findbugs.UR_UNINIT_READ.name
错误用法 - 构造方法中对未初始化的类进行了读取
rule.findbugs.WA_NOT_IN_LOOP.name
多线程错误 - Wait不在循环中
rule.findbugs.DMI_FUTILE_ATTEMPT_TO_CHANGE_MAXPOOL_SIZE_OF_SCHEDULED_THREAD_POOL_EXECUTOR.name
错误用法 - 尝试修改ScheduledThreadPoolExecutor的最大数
rule.findbugs.RV_RETURN_VALUE_IGNORED2.name
错误用法 - 方法忽略了返回值
rule.findbugs.NM_FIELD_NAMING_CONVENTION.name
属性名应该以小写字母开头
rule.findbugs.FB_UNEXPECTED_WARNING.name
试验 - 未期待/未期望的findbugs警告
rule.findbugs.BX_UNBOXED_AND_COERCED_FOR_TERNARY_OPERATOR.name
错误用法 - 基础类型拆箱后用于三元表达式
rule.findbugs.DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED.name
不良实践 - Classloaders应该只在doPrivileged块中被创建
rule.findbugs.NM_WRONG_PACKAGE.name
错误用法 - 方法没有覆盖父类的方法,因为参数的包不正确
rule.findbugs.IL_CONTAINER_ADDED_TO_ITSELF.name
错误用法 - 一个集合被添加到自身
rule.findbugs.CI_CONFUSED_INHERITANCE.name
高危 - 类是final的,但是定义了protected属性
rule.findbugs.HE_USE_OF_UNHASHABLE_CLASS.name
错误用法 - 在哈希数据结构中使用的类没有定义hashCode()方法
rule.findbugs.IJU_SUITE_NOT_STATIC.name
错误用法 - TestCase实现了非static suite方法
rule.findbugs.RS_READOBJECT_SYNC.name
多线程错误 - 类的readObject()方法不是同步的
rule.findbugs.AM_CREATES_EMPTY_JAR_FILE_ENTRY.name
不良实践 - 创建了一个空的jar方法入口
rule.findbugs.VA_FORMAT_STRING_BAD_CONVERSION_FROM_ARRAY.name
错误用法 - 使用格式化字符串对数组进行了无用的格式化
rule.findbugs.SF_DEAD_STORE_DUE_TO_SWITCH_FALLTHROUGH_TO_THROW.name
switch语句失败抛出异常导致无用的存储
rule.findbugs.RV_ABSOLUTE_VALUE_OF_HASHCODE.name
错误用法 - 错误的尝试计算带符号的32位hashcodde的绝对值
rule.findbugs.EQ_DONT_DEFINE_EQUALS_FOR_ENUM.name
错误用法 - 枚举定义了协变equals()方法定义
rule.findbugs.SA_FIELD_DOUBLE_ASSIGNMENT.name
错误用法 - 对属性进行双重赋值
rule.findbugs.DMI_COLLECTION_OF_URLS.name
性能 - URL的Maps 和 sets可能是性能大问题
rule.findbugs.NM_SAME_SIMPLE_NAME_AS_INTERFACE.name
不良实践 - 类名不应该和实现的接口名相同
rule.findbugs.UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR.name
错误用法 - 构造方法没有初始化属性
rule.findbugs.TQ_MAYBE_SOURCE_VALUE_REACHES_NEVER_SINK.name
错误用法 - 值可能带着一个类型修饰符,一直使用的方式是与这个类型修饰符相悖的
rule.findbugs.SE_NONLONG_SERIALVERSIONID.name
不良实践 - serialVersionUID不是long型
rule.findbugs.RV_REM_OF_HASHCODE.name
高危 - hashCode的结果可能是负数negative
rule.findbugs.NS_DANGEROUS_NON_SHORT_CIRCUIT.name
高危 - 潜在危险使用非短跳出逻辑
rule.findbugs.USM_USELESS_SUBCLASS_METHOD.name
试验 - 方法代理到父类方法
rule.findbugs.ITA_INEFFICIENT_TO_ARRAY.name
性能 - 方法使用了toArray()对空数组参数
rule.findbugs.DM_MONITOR_WAIT_ON_CONDITION.name
多线程错误 - 根据条件监控wait()的调用
rule.findbugs.BOA_BADLY_OVERRIDDEN_ADAPTER.name
错误用法 - 类覆盖了父类中实现的方法适配器错误
rule.findbugs.IC_INIT_CIRCULARITY.name
高危 - 初始化死循环
rule.findbugs.NM_FUTURE_KEYWORD_USED_AS_IDENTIFIER.name
不良实践 - 使用的标记是未来java版本中的关键字
rule.findbugs.EC_UNRELATED_CLASS_AND_INTERFACE.name
错误用法 - equals()比较无关的类和接口
rule.findbugs.TQ_MAYBE_SOURCE_VALUE_REACHES_ALWAYS_SINK.name
错误用法 - 值可能没有携带一个类修饰符,但是使用中会一直需要这个类修饰符
rule.findbugs.FE_TEST_IF_EQUAL_TO_NOT_A_NUMBER.name
错误用法 - 测试是否与NaN相等
rule.findbugs.NM_CONFUSING.name
不良实践 - 迷惑的方法名
rule.findbugs.VA_FORMAT_STRING_ARG_MISMATCH.name
错误用法 - 格式化字符串参数的数目与占位符不相等
rule.findbugs.NP_NULL_ON_SOME_PATH_EXCEPTION.name
错误用法 - 方法的异常路径中可能引用空指针
rule.findbugs.DL_SYNCHRONIZATION_ON_BOXED_PRIMITIVE.name
多线程错误 - 同步装箱基本类型可能导致死锁
rule.findbugs.IJU_TEARDOWN_NO_SUPER.name
错误用法 - TestCase定义的tearDown没有调用super.tearDown()
rule.findbugs.SE_READ_RESOLVE_IS_STATIC.name
错误用法 - readResolve方法没有生命为static方法
rule.findbugs.NP_NULL_ON_SOME_PATH_MIGHT_BE_INFEASIBLE.name
高危 - 这个路径上空指针引用是不可实现的
rule.findbugs.UMAC_UNCALLABLE_METHOD_OF_ANONYMOUS_CLASS.name
错误用法 - 匿名内部类中定义的不可调用的方法
rule.findbugs.VA_FORMAT_STRING_BAD_CONVERSION.name
错误用法 - 提供的参数类型与格式化标记不符
rule.findbugs.EC_ARRAY_AND_NONARRAY.name
错误用法 - equals()用来比较数组和非数组
rule.findbugs.NM_BAD_EQUAL.name
类定义了equal(Object),应该是equals(Object)吧?
rule.findbugs.EC_UNRELATED_TYPES_USING_POINTER_EQUALITY.name
错误用法 - 使用指针比较不同的类型
rule.findbugs.STI_INTERRUPTED_ON_CURRENTTHREAD.name
错误用法 - currentThread()调用的不必要用法,调用了interrupted()
rule.findbugs.RE_CANT_USE_FILE_SEPARATOR_AS_REGULAR_EXPRESSION.name
错误用法 - File.separator用做正则表达式
rule.findbugs.MWN_MISMATCHED_WAIT.name
多线程错误 - 不匹配的wait()
rule.findbugs.IL_INFINITE_LOOP.name
错误用法 - 明显的无限循环
rule.findbugs.NP_IMMEDIATE_DEREFERENCE_OF_READLINE.name
高危 - 立刻使用了readLine()的结果
rule.findbugs.SC_START_IN_CTOR.name
多线程错误 - 构造方法调用了Thread.start()
rule.findbugs.STCAL_STATIC_SIMPLE_DATE_FORMAT_INSTANCE.name
多线程错误 - 静态DateFormat
rule.findbugs.HE_EQUALS_NO_HASHCODE.name
不良实践 - 类定义了equals(),但是没有hashCode()
rule.findbugs.UL_UNRELEASED_LOCK.name
多线程错误 - 方法没有在任何路径中释放锁
rule.findbugs.PZLA_PREFER_ZERO_LENGTH_ARRAYS.name
高危 - 考虑返回空数组而不是null
rule.findbugs.SKIPPED_CLASS_TOO_BIG.name
高危 - 类太大不能分析
rule.findbugs.NP_ARGUMENT_MIGHT_BE_NULL.name
错误用法 - 方法没有检查空参数
rule.findbugs.UM_UNNECESSARY_MATH.name
性能 - 方法常量调用了静态Math类方法
rule.findbugs.NM_WRONG_PACKAGE_INTENTIONAL.name
不良实践 - 方法没有覆盖父类的方法因为参数包名错误
rule.findbugs.NP_NONNULL_PARAM_VIOLATION.name
错误用法 - 方法传递null给一个非空参数
rule.findbugs.BIT_AND_ZZ.name
错误用法 - 检查 ((...) & 0) 


 0 是否成立
rule.findbugs.HRS_REQUEST_PARAMETER_TO_COOKIE.name
安全风险 - HTTP cookie可能来自不被信任的输入
rule.findbugs.SQL_BAD_RESULTSET_ACCESS.name
错误用法 - 方法尝试访问一个ResultSet,但是使用的index是0
rule.findbugs.INT_VACUOUS_COMPARISON.name
高危 - 整形的空比较
rule.findbugs.EQ_COMPARETO_USE_OBJECT_EQUALS.name
不良实践 - 类定义了compareTo(...),但使用了Object.equals()
rule.findbugs.DMI_HARDCODED_ABSOLUTE_FILENAME.name
高危 - 类包含一个硬编码的绝对路径
rule.findbugs.DMI_COLLECTIONS_SHOULD_NOT_CONTAIN_THEMSELVES.name
错误用法 - 集合不应该包含自身
rule.findbugs.URF_UNREAD_FIELD.name
性能 - 读不到的属性
rule.findbugs.DLS_OVERWRITTEN_INCREMENT.name
错误用法 - 重写了自增
rule.findbugs.BIT_SIGNED_CHECK.name
不良实践 - 检测带符号的位运算
rule.findbugs.UWF_NULL_FIELD.name
错误用法 - 属性曾经设置为null
rule.findbugs.DE_MIGHT_DROP.name
不良实践 - 方法可能抛出异常
rule.findbugs.DMI_BAD_MONTH.name
错误用法 - 对于month错误的常量值
rule.findbugs.MS_MUTABLE_ARRAY.name
恶意代码漏洞 - 属性是可变数组
rule.findbugs.SE_INNER_CLASS.name
不良实践 - 可序列化的内部类
rule.findbugs.OS_OPEN_STREAM_EXCEPTION_PATH.name
不良实践 - 方法可能在关闭流时因为异常而失败
rule.findbugs.AT_OPERATION_SEQUENCE_ON_CONCURRENT_ABSTRACTION.name
并发抽象的顺序调用可能不是原子的
rule.findbugs.BX_UNBOXING_IMMEDIATELY_REBOXED.name
装箱的值被拆箱,然后立刻重新装箱了
rule.findbugs.CO_COMPARETO_RESULTS_MIN_VALUE.name
compareTo()或compare()返回Integer.MIN_VALUE
rule.findbugs.DLS_DEAD_LOCAL_STORE_SHADOWS_FIELD.name
无用的局部变量可能与实例属性同名
rule.findbugs.DMI_ARGUMENTS_WRONG_ORDER.name
方法参数顺序翻转
rule.findbugs.DMI_BIGDECIMAL_CONSTRUCTED_FROM_DOUBLE.name
由double构造BigDecimal时没有指定精确度
rule.findbugs.DMI_DOH.name
一个明显不合理的方法调用
rule.findbugs.DMI_ENTRY_SETS_MAY_REUSE_ENTRY_OBJECTS.name
一个入口的添加可能因为重用Entry对象导致失败
rule.findbugs.DM_DEFAULT_ENCODING.name
信任默认字符编码
rule.findbugs.ICAST_INT_2_LONG_AS_INSTANT.name
int转换成long,用来当做绝对时间
rule.findbugs.INT_BAD_COMPARISON_WITH_INT_VALUE.name
错误比较int值和long常量
rule.findbugs.JML_JSR166_CALLING_WAIT_RATHER_THAN_AWAIT.name
在util.concurrent抽象中使用监控样式的wait方法
rule.findbugs.NP_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD.name
读取了未初始化的public或protected属性
rule.findbugs.OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE.name
方法可能因为checked exception导致清理流或资源失败
rule.findbugs.PZ_DONT_REUSE_ENTRY_OBJECTS_IN_ITERATORS.name
不用在iterator里重用entry对象
rule.findbugs.RV_CHECK_COMPARETO_FOR_SPECIFIC_RETURN_VALUE.name
compareTo返回的值与指定的值进行检测
rule.findbugs.RV_NEGATING_RESULT_OF_COMPARETO.name
调换了compareTo()/compare()结果的正负
rule.findbugs.RV_RETURN_VALUE_IGNORED_INFERRED.name
方法忽略了返回值,这是正常的吗?
rule.findbugs.SA_LOCAL_SELF_ASSIGNMENT_INSTEAD_OF_FIELD.name
局部变量给自己赋值而不是赋值到实例变量中
rule.findbugs.URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD.name
未被读取的public/protected属性
rule.findbugs.UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD.name
未被使用的public 或 protected 属性
rule.findbugs.UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD.name
未初始化的public 或 protected 属性
rule.findbugs.VA_FORMAT_STRING_USES_NEWLINE.name
格式化代码应该使用%n代替\n
rule.findbugs.VO_VOLATILE_INCREMENT.name
volatile的自增操作不是原子的  

以上,是我对findbugs工具使用的总结。部分来源于查资料所得,对于热衷于技术分享的各位同行在此表示感谢。也希望此篇文章对大家有所帮助。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机号已被注册怎么办 借贷宝不销账怎么办 借贷宝没有好友怎么办 身份证复制软件打不开怎么办 国政通无照片怎么办 超出五张手机卡怎么办 唐筛mom值异常怎么办 身份证没有磁了怎么办 身份证没慈了怎么办 人像比对不通过怎么办 贷上钱人脸识别老是失败怎么办 人脸识别过不去怎么办 身份证在家丢了怎么办 电脑系统安装失败怎么办 内存卡读取不了怎么办 内存卡不能用怎么办 手机不能读卡怎么办 药房读卡器坏了怎么办 u盘没反应怎么办 网页界面变小了怎么办 假警察扫身份证怎么办 做大巴查身份证怎么办 大股东分红时怎么办 相机读卡器为什么打不开怎么办 电脑无法识别读卡器怎么办 无法识别sd卡怎么办 sd卡格式不了怎么办 内存卡被写保护怎么办 qq读不出sd卡怎么办 sd卡格式化了怎么办 sd卡不能识别怎么办 相机内存卡读不出来怎么办 电脑文件无法删除怎么办 读卡器读不出内存卡怎么办 医保卡读取不了怎么办 内存卡不识别怎么办 电脑储存卡坏了怎么办 储存卡读不出来怎么办 内存卡显示受损怎么办 身份证年龄错了怎么办 身份复印件丢了怎么办