JD.UMC.FINALIZE
JD.UMC.FINALIZE 显示方法包含显式调用对象的 finalize() 方法。
漏洞与风险
对象终结器方法应执行一次,并且仅能由 JVM 执行,因此显式调用一个方法是不正确的做法。根据特定 JVM 及其实施方法,不当行为可能是因为调用了两次对象终结器方法。
缓解与预防
最好完全避开终结器,并创建名称不同的显式终结方法。如绝对需要,终结器可将对象终结器方法作为 "safety net" 进行调用。
示例 1
复制
OutputStream st;
protected void finalize() throws Throwable {
if (st!=null) st.close();
super.finalize();
}
void run() throws Throwable{
// ...
finalize();
}
针对第 19 行的调用报告 JD.UMC.FINALIZE:已调用“finalize()”方法。该方法并非用于显式调用。