[hyddd的FindBugs分析记录][M X OBL] Method may fail to clean up stream or resource
2009-02-16 14:55 hyddd 阅读(6793) 评论(0) 编辑 收藏 举报[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-----------------------------------------
FileOutputStream fs = null;
try{
fs = new FileOutputStream(clearTableFile);
fs.close(); //当出异常时候fs关闭失败,所以应该在finally中关闭
}
catch(){
//
}
-----------------------------------------------情况2-----------------------------------------
Properties props = new Properties();
try{
props.store(new FileOutputStream(configFile), configFile); //new FileOutputStream(configFile)没有释放。
}
catch(){
//
}
-----------------------------------------------情况3-----------------------------------------
FileOutputStream fs = new FileOutputStream(clearTableFile);
// (里没有做异常处理,如果中间出异常了,异常会抛往上层,这时fs就没能释放了。
fs.close();
//
作者:hyddd
出处:http://www.cnblogs.com/hyddd/
本文版权归作者所有,欢迎转载,演绎或用于商业目的,但是必须说明本文出处(包含链接)。