`
duanfei
  • 浏览: 732170 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

findbugs清理总结

 
阅读更多

findbugs警告26个。主要有以下9类问题。

1、Bug: Hard coded reference to an absolute pathname
BUG描述:This code constructs a File object using a hard coded to an absolute pathname(此代码包含文件对象为一个绝对路径名)
 
问题原因:硬编码指向绝对路径。
 
File preFile = new File(PREFERENCES_FILE_FULL_PATH);
 
而private static final String PREFERENCES_FILE_FULL_PATH =
 
        "/data/data/com.android.mms/shared_prefs/auto_downLoad.xml";
 
PREFERENCES_FILE_FULL_PATH声明为了final型,不可变的。如果后续文件路径有变更,引用不到了,但路径又不可更改,就会引入问题。
 
解决方法:去掉final。
 
2、Bug: Pattern: Dead store to local variable
 
BUG描述:This instruction assigns a value to a local variable, but the value is not read or used in any subsequent instruction. Often, this indicates an error, because the value computed is never used. (该指令为局部变量赋值,但在其后的没有对她做任何使用。通常,这表明一个错误,因为值从未使用过。)
 
问题原因:锁屏中提示Dead store to velocityX,分析代码
 
case MotionEvent.ACTION_POINTER_1_UP语句中定义了局部变量velocityX,并且只在if ((mDirectionFlag && velocityX > 0)||(!mDirectionFlag && velocityX < 0))
 
                    velocityX = -velocityX;中赋值后并未再使用。因此没有赋值的必要,并且分析代码不需要该变量,可以去除。
 
解决方法:去掉velocityX变量的定义及赋值。
 
3、BUG: Inconsistent synchronization
BUG描述:The fields of this class appear to be accessed inconsistently with respect to synchronization. (不合理的同步)
 
问题原因:根据描述ConfigLoader文件中mUnlockAppDataMap在46%的时间内都是处于被锁状态。分析代码mUnlockAppDataMap是在checkUnlockAppConfigChange这个函数中被锁的。而该方法public synchronized boolean checkUnlockAppConfigChange(Context context)没有地方调用。
 
解决方法:去掉synchronized关键字。
 
4、BUG: Incorrect lazy initialization of static field
 
BUG描述:This method contains an unsynchronized lazy initialization of a non-volatile static field. Because the compiler or processor may reorder instructions, threads are not guaranteed to see a completely initialized object, if the method can be called by multiple threads.(这种方法包含了一个不同步延迟初始化的非volatile静态字段。因为编译器或处理器可能会重新排列指令,如果该方法可以被多个线程调用,线程不能保证看到一个完全初始化的对象。)
 
问题原因:sInstance 是static型,clean()方法可能被多个线程调用,在sInstance判断为非空后,再清空置null时可能会有问题。
 
解决方法:给clean()加上关键字synchronized .public static synchronized void clean()
 
5、BUG: Redundant nullcheck of value known to be non-null
 
BUG描述:This method contains a redundant check of a known non-null value against the constant null.(方法中对不为空的值进行为空的判断。)
 
问题原因:分析findbugs报错的这段代码
 
if(mInputStream == null){
 
Log.i(TAG , " mInputStream is null ");
 
return;
 
}
 
mDBuilder = mDBuilderFactory.newDocumentBuilder();
 
if(mInputStream != null) {
 
mDocument = mDBuilder.parse(mInputStream);
 
}else {
 
Log.i(TAG , "mInputStream ==  null");
 
return;
 
}
 
mInputStream若为null,则直接返回。后面不需要再有if(mInputStream != null)的判断。
 
解决方法:在mInputStream判空后不再重复判空,将后面if判断中的mInputStream改为mDBuilder。
 
6、BUG: Should be a static inner class
 
BUG描述:This class is an inner class, but does not use its embedded reference to the object which created it.  This reference makes the instances of the class larger, and may keep the reference to the creator object alive longer than necessary.  If possible, the class should be made static.(若成员类中未访问外围类的非静态成员,为避免额外的空间和时间开销,建议改用静态成员类。)
 
问题原因:非静态成员类和静态成员类的区别在于,非静态成员类是对象的,静态成员类是类的。非静态成员类可以访问外围类的任何成员,但前提是必须存在外围类对象。JAVA需要额外维护非静态成员类和外围类对象的关系。分析代码private class IccText和private class MediaMetadata {没有访问到外围类的非静态成员,所以findbugs建议将其设为static型。
 
解决方法:将这2个内部类改为static型。
 
7、BUG: Switch statement found where one case falls through to the next case
BUG描述:This method contains a switch statement where one case branch will fall through to the next case. Usually you need to end this case with a break or return.(Switch语句中一个分支执行后又执行了下一个分支。通常case后面要跟break或者return语句来跳出。)
 
问题原因:case MotionEvent.ACTION_UP执行完之后没有break,会继续走case MotionEvent.ACTION_CANCEL分支。分析代码逻辑,手指抬起后,锁屏图标需要回到初始位置,而回到初始位置的逻辑是在ACTION_CANCEL里做的。即ACTION_UP后的逻辑还需要ACTION_CANCEL里面的逻辑。
 
解决方法:将ACTION_CANCEL中的逻辑拉出来做成一个函数,ACTION_UP逻辑后调用这个函数后再做break操作。
 
8、BUG: Unread field
BUG描述:This field is never read.  Consider removing it from the class.(类中定义的属性从未被调用,建议删除。)
 
问题原因:在类中定义了成员变量private HwViewProperty mCondition = null;代码中只有赋值操作mCondition = new HwViewProperty(mContext,value, ViewPropertyType.TYPE_CONDITION, mCallback);但没有使用这个变量mCondition的地方。
 
解决方法:去掉mCondition的定义及赋值语句。但需注意,mCondition = new HwViewProperty(mContext,value, ViewPropertyType.TYPE_CONDITION, mCallback);赋值中,虽然mCondition变量后续没有使用到,但new HwViewProperty对象调用HwViewProperty的构造方法时,其实是做了功能操作的。因此,去掉mCondition,但需要保留new HwViewProperty(mContext,value, ViewPropertyType.TYPE_CONDITION, mCallback);
 
9、BUG: Write to static field from instance method
BUG描述:This instance method writes to a static field. This is tricky to get correct if multiple instances are being manipulated, and generally bad practice.(实例方法直接写静态变量。)
 
问题原因:sInstance是类的静态成员变量,非静态方法unregisterCallbaks直接对其赋值,非静态方法是与对象相关联的,当多个对象同时对该变量进行赋值时可能出现问题。
 
解决方法:在使用静态成员变量时使用get和set方法。
分享到:
评论

相关推荐

    findBugs学习总结

    在Java编程中,静态代码分析工具是提升代码质量和预防潜在问题的重要手段,其中findBugs是一款备受推崇的开源工具。findBugs通过静态分析技术,能够检测出代码中可能存在的bug,帮助开发者在运行程序之前就发现并...

    findbugs工具测试java实验报告

    【findbugs工具测试Java实验报告】 在软件开发过程中,代码质量是至关重要的,因为它直接影响到程序的稳定性、可维护性和性能。为了确保代码的质量,开发者通常会采用各种静态代码分析工具,其中FindBugs就是一款...

    findbugs 1.3.9 findbugs 1.3.9

    7. **社区支持**:通过《静态分析工具及使用总结(三) - 繁星满空 - BlogJava.htm》等社区文章,开发者可以获取到使用经验和技巧,进一步优化FindBugs的使用。 FindBugs 1.3.9的使用方法: - 安装Eclipse插件:...

    findbugs压缩包+findbugs.jar+findbugs-ant.jar

    标题中的"findbugs压缩包+findbugs.jar+findbugs-ant.jar"指的是该压缩文件内包含FindBugs的主要库文件`findbugs.jar`,这是执行FindBugs分析的核心组件,它包含了各种检测规则和算法。另外,`findbugs-ant.jar`则是...

    findbugs.jar+findbugs-ant.jar

    总结一下,FindBugs是一款强大的静态代码分析工具,可以集成到Eclipse中帮助开发者提升代码质量。`findbugs.jar`和`findbugs-ant.jar`是其核心组件,分别用于分析和Ant集成。通过正确配置和使用这两个jar文件,...

    网络上搜集的Findbugs在Ant下的配置方法

    **Findbugs在Ant下的配置方法** FindBugs是一款开源的静态代码分析工具,主要用于检测Java代码中的潜在错误、坏味道和安全漏洞。它通过分析字节码而非源代码,能够发现许多编译器无法捕获的问题。在Ant构建环境中...

    findbugs3.0.2插件 myeclipse

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

    findbugs最新源代码20081008版本的

    《深入理解FindBugs:基于20081008源码的探索》 FindBugs是一款著名的静态代码分析工具,它通过扫描Java字节码来检测潜在的错误和不良编程习惯,被誉为“程序员的无声守护者”。2008年10月08日的版本是FindBugs发展...

    findbugs与ant结合

    FindBugs 和 Apache Ant 都是Java开发中常用的工具,前者是用于检测代码质量问题的静态分析工具,后者则是一个构建自动化工具。本文将详细介绍如何将 FindBugs 与 Ant 结合,以生成 HTML 报告,帮助开发者更好地理解...

    findbugs-annotations-1.3.9-1-API文档-中文版.zip

    赠送jar包:findbugs-annotations-1.3.9-1.jar; 赠送原API文档:findbugs-annotations-1.3.9-1-javadoc.jar; 赠送源代码:findbugs-annotations-1.3.9-1-sources.jar; 赠送Maven依赖信息文件:findbugs-...

    FindBugs安装及配置使用说明

    FindBugs是一款强大的Java字节码静态分析工具,它能够帮助开发者在代码执行前发现潜在的缺陷和质量问题。通过检查类文件和JAR包,FindBugs与一系列预定义的缺陷模式进行匹配,从而找出可能存在的问题。这种静态分析...

    SonarQube的FindBugs插件sonar-findbugs-plugin.jar,包含FindBugs Security Audit等规则

    SonarQube的FindBugs插件sonar-findbugs-plugin.jar(版本:4.0.1-SNAPSHOT),包含FindBugs Security Audit等规则,可以离线集成到sonarqube。

    findbugs-3.0.1.zip

    总结,FindBugs 3.0.1是Java开发者提高代码质量的有力助手,通过静态分析技术,它能够在编码阶段就帮助我们发现并修复潜在的问题,从而降低软件缺陷的风险。通过阅读"使用说明.txt"并实际操作,我们可以更好地理解和...

    findbugs插件使用文档

    `FindBugs`是一款强大的静态代码分析工具,主要用于检测Java代码中的潜在错误和不良实践。它通过分析字节码来找出可能存在的问题,而无需实际运行程序。在Maven项目中,我们可以使用`findbugs-maven-plugin`这个...

    FindBugs安装与使用说明

    总结,FindBugs作为一款强大的静态代码分析工具,可以帮助开发者提升代码质量,减少运行时错误。通过正确安装、配置和使用FindBugs,可以有效地提升开发效率,保证项目的健壮性。在实际开发过程中,结合IDE集成和...

    findbugs插件

    FindBugs是一款非常知名的静态代码分析工具,主要应用于Java程序,用于检测可能存在的错误和缺陷。这个"findbugs2.02"版本是该插件的一个特定迭代,它提供了对Java代码的深度分析,帮助开发者在编码阶段就能发现潜在...

    findbugs 最新eclipse插件

    **findbugs最新Eclipse插件**是用于静态代码分析的工具,它可以帮助开发者在编码阶段发现潜在的错误和不良编程习惯。FindBugs是开源项目,由University of Maryland开发并维护,广泛应用于Java应用程序的质量保证...

    findbugs2.0插件包

    FindBugs 2.0 插件包是一个用于静态代码分析的工具,旨在检测Java程序中的潜在错误和不良编程习惯。这个插件是FindBugs项目的一个版本,它集成到Eclipse IDE中,使得开发人员可以在编码阶段就发现并修复问题,而无需...

    findbugs代码检查工具

    FindBugs是一款强大的静态代码分析工具,主要用于检测Java代码中的潜在错误和不良编程习惯。它通过对编译后的字节码进行分析,而不需要实际运行代码,就能找出可能存在的问题,从而帮助开发者提升代码质量,减少运行...

Global site tag (gtag.js) - Google Analytics