FindBugs错误修改中文说明大全Word格式文档下载.docx
《FindBugs错误修改中文说明大全Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《FindBugs错误修改中文说明大全Word格式文档下载.docx(96页珍藏版)》请在冰豆网上搜索。
HRS:
HTTPcookieformedfromuntrustedinput(HRS_REQUEST_PARAMETER_TO_COOKIE)
此代码使用不受信任的HTTP参数构造一个HTTPCookie。
LG:
PotentiallostloggerchangesduetoweakreferenceinOpenJDK(LG_LOST_LOGGER_DUE_TO_WEAK_REFERENCE)
OpenJDK的引入了一种潜在的不兼容问题,特别是,java.util.logging.Logger的行为改变时。
它现在使用内部弱引用,而不是强引用。
–logger配置改变,它就是丢失对logger的引用,这本是一个合理的变化,但不幸的是一些代码对旧的行为有依赖关系。
这意味着,当进行垃圾收集时对logger配置将会丢失。
例如:
publicstaticvoidinitLogging()throwsException{
Loggerlogger=Logger.getLogger("
edu.umd.cs"
);
logger.addHandler(newFileHandler());
//calltochangeloggerconfiguration
logger.setUseParentHandlers(false);
//anothercalltochangeloggerconfiguration
}
该方法结束时logger的引用就丢失了,如果你刚刚结束调用initLogging方法后进行垃圾回收,logger的配置将会丢失(因为只有保持记录器弱引用)。
publicstaticvoidmain(String[]args)throwsException{
initLogging();
//addsafilehandlertothelogger
System.gc();
//loggerconfigurationlost
Logger.getLogger("
).info("
Somemessage"
//thisisn'
tloggedtothefileasexpected
OBL:
Methodmayfailtocleanupstreamorresource(OBL_UNSATISFIED_OBLIGATION)
这种方法可能无法清除(关闭,处置)一个流,数据库对象,或其他资源需要一个明确的清理行动。
一般来说,如果一个方法打开一个流或其他资源,该方法应该使用try/finally块来确保在方法返回之前流或资源已经被清除了。
这种错误模式基本上和OS_OPEN_STREAM和ODR_OPEN_DATABASE_RESOURCE错误模式相同,但是是在不同在静态分析技术。
我们正为这个错误模式的效用收集反馈意见。
Badpractice代码实现中的一些坏习惯
AM:
Createsanemptyjarfileentry(AM_CREATES_EMPTY_JAR_FILE_ENTRY)
调用putNextEntry()方法写入新的jar文件条目时立即调用closeEntry()方法。
这样会造成JarFile条目为空。
Createsanemptyzipfileentry(AM_CREATES_EMPTY_ZIP_FILE_ENTRY)
调用putNextEntry()方法写入新的zip文件条目时立即调用closeEntry()方法。
这样会造成ZipFile条目为空。
BC:
Equalsmethodshouldnotassumeanythingaboutthetypeofitsargument(BC_EQUALS_METHOD_SHOULD_WORK_FOR_ALL_OBJECTS)
equals(Objecto)方法不能对参数o的类型做任何的假设。
比较此对象与指定的对象。
当且仅当该参数不为null,并且是表示与此对象相同的类型的对象时,结果才为true。
4.
Randomobjectcreatedandusedonlyonce(DMI_RANDOM_USED_ONLY_ONCE)
随机创建对象只使用过一次就抛弃
5.
BIT:
Checkforsignofbitwiseoperation(BIT_SIGNED_CHECK)
检查位操作符运行是否合理
((event.detail&
SWT.SELECTED)>
0)
IfSWT.SELECTEDisanegativenumber,thisisacandidateforabug.EvenwhenSWT.SELECTEDisnotnegative,itseemsgoodpracticetouse'
!
=0'
insteadof'
>
0'
.
6.
CN:
ClassimplementsCloneablebutdoesnotdefineoruseclonemethod(CN_IDIOM)
按照惯例,实现此接口的类应该使用公共方法重写Object.clone(它是受保护的),以获得有关重写此方法的详细信息。
此接口不包含clone方法。
因此,因为某个对象实现了此接口就克隆它是不可能的,应该实现此接口的类应该使用公共方法重写Object.clone
7.
clonemethoddoesnotcallsuper.clone()(CN_IDIOM_NO_SUPER_CALL)
一个非final类型的类定义了clone()方法而没有调用super.clone()方法。
B扩展自A,如果B中clone方法调用了spuer.clone(),而A中的clone没有调用spuer.clone(),就会造成结果类型不准确。
要求A的clone方法中调用spuer.clone()方法。
8.
Classdefinesclone()butdoesn'
timplementCloneable(CN_IMPLEMENTS_CLONE_BUT_NOT_CLONEABLE)
类中定义了clone方法但是它没有实现Cloneable接口
9.
Co:
AbstractclassdefinescovariantcompareTo()method(CO_ABSTRACT_SELF)
抽象类中定义了多个compareTo()方法,正确的是覆写Comparable中的compareTo方法,方法的参数为Object类型,如下例:
intcompareTo(To)
比较此对象与指定对象的顺序。
10.
CovariantcompareTo()methoddefined(CO_SELF_NO_OBJECT)
类中定义了多个compareTo()方法,正确的是覆写Comparable中的compareTo方法,方法的参数为Object类型
11.
DE:
Methodmightdropexception(DE_MIGHT_DROP)
方法可能抛出异常
12.
Methodmightignoreexception(DE_MIGHT_IGNORE)
方法可能忽略异常
13.
DMI:
Don'
tuseremoveAlltoclearacollection(DMI_USING_REMOVEALL_TO_CLEAR_COLLECTION)
不要用removeAll方法去clear一个集合
14.
DP:
ClassloadersshouldonlybecreatedinsidedoPrivilegedblock(DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED)
类加载器只能建立在特殊的方法体内
15.
MethodinvokesSystem.exit(...)(DM_EXIT)
在方法中调用System.exit(...)语句,考虑用RuntimeException来代替
16.
MethodinvokesdangerousmethodrunFinalizersOnExit(DM_RUN_FINALIZERS_ON_EXIT)
在方法中调用了System.runFinalizersOnExit或者Runtime.runFinalizersOnExit方法,因为这样做是很危险的。
17.
ES:
ComparisonofStringparameterusing==or!
=(ES_COMPARING_PARAMETER_STRING_WITH_EQ)
用==或者!
=方法去比较String类型的参数
18.
ComparisonofStringobjectsusing==or!
=(ES_COMPARING_STRINGS_WITH_EQ)
用==或者!
=去比较String类型的对象
19.
Eq:
Abstractclassdefinescovariantequals()method(EQ_ABSTRACT_SELF)
20.
Equalschecksfornoncompatibleoperand(EQ_CHECK_FOR_OPERAND_NOT_COMPATIBLE_WITH_THIS)
equals方法检查不一致的操作。
两个类根本就是父子关系而去调用equals方法去判读对象是否相等。
publicbooleanequals(Objecto){
if(oinstanceofFoo)
returnname.equals(((Foo)o).name);
elseif(oinstanceofString)
returnname.equals(o);
elsereturnfalse;
21.
ClassdefinescompareTo(...)andusesObject.equals()(EQ_COMPARETO_USE_OBJECT_EQUALS)
类中定义了compareTo方法但是继承了Object中的compareTo方法
22.
equalsmethodfailsforsubtypes(EQ_G