读书人

findbugs 网络搜集

发布时间: 2012-12-19 14:13:14 作者: rapoo

findbugs 网络收集
[hyddd的FindBugs分析记录][M X OBL] Method may fail to clean up stream or resource

[M X OBL] Method may fail to clean up stream or resource [OBL_UNSATISFIED_OBLIGATION]

This method may fail to clean up (close, dispose of) a stream, database object, or other resource requiring an explicit cleanup operation.

In general, if a method opens a stream or other resource, the method should use a try/finally block to ensure that the stream or resource is cleaned up before the method returns.

This bug pattern is essentially the same as the OS_OPEN_STREAM and ODR_OPEN_DATABASE_RESOURCE bug patterns, but is based on a different (and hopefully better) static analysis technique. We are interested is getting feedback about the usefulness of this bug pattern. To send feedback, either:

send email to findbugs@cs.umd.edu file a bug report: http://findbugs.sourceforge.net/reportingBugs.html

In particular, the false-positive suppression heuristics for this bug pattern have not been extensively tuned, so reports about false positives are helpful to us.

See Weimer and Necula, Finding and Preventing Run-Time Error Handling Mistakes, for a description of the analysis technique.

?

这个BUG想说明的是:有些资源打开了,但在函数结束的时候却没有关闭。比如:数据库连接......

虽然JAVA有垃圾回收机制,但是,自己打开的资源需要自己手动关闭,否则有可能直到程序退出,JRE才会清理你打开的资源。这里FindBugs建议在try/finally里面关闭打开的资源,在关闭之前,还要判断资源是否为Null,或者再加一层异常捕获处理噢~

以下是一些可能关闭资源失败的例子:

-----------------------------------------------情况1-----------------------------------------

?

//findbugs 网络搜集
FileOutputStream?fs?=?null;
try{
  fs?=?new?FileOutputStream(clearTableFile);
  fs.close();????//当出异常时候fs关闭失败,所以应该在finally中关闭
}
catch(findbugs 网络搜集){
//findbugs 网络搜集
}

-----------------------------------------------情况2-----------------------------------------

?

//findbugs 网络搜集
Properties?props?=?new?Properties();
try{
  props.store(new?FileOutputStream(configFile),?configFile);  //new?FileOutputStream(configFile)没有释放。
}
catch(findbugs 网络搜集){
  //findbugs 网络搜集
}

-----------------------------------------------情况3-----------------------------------------

?


  FileOutputStream?fs?=?new?FileOutputStream(clearTableFile);
  //findbugs 网络搜集????(里没有做异常处理,如果中间出异常了,异常会抛往上层,这时fs就没能释放了。
  fs.close();????
  //findbugs 网络搜集

http://www.ibm.com/developerworks/cn/java/j-dyn0414/index.html
http://bcel.sourceforge.net/docs/index.html
http://findbugs.sourceforge.net/api/edu/umd/cs/findbugs/ba/BlockType.html
http://code.google.com/p/findbugs/wiki/DetectorPluginTutorial
http://www.ibm.com/developerworks/java/library/j-findbug1/#resources

读书人网 >其他数据库

热点推荐