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()”方法。该方法并非用于显式调用。