JD.FINRET
当 finally 块中出现 return 语句时,出现 JD.FINRET。
漏洞与风险
finally 块中的 return 语句会导致可能出现在 try 块中的任何异常被丢弃,并会导致原本要通过该方法返回的所有值替换为 finally 块中返回的值。
缓解与预防
finally 块应仅包含结束代码。关于返回值的所有逻辑和重新引发的预期都不应位于 finally 块中。
示例 1
复制
                                                    
                                                
                                                      int foo2(String name) {
         try {
             return Integer.parseInt(name);
         } catch (NumberFormatException e) {
             throw e;
         } finally {
             return -1;
         }
     }
                                                    在第 15 行报告 JD.FINRET:finally 块中的“return”会导致易被忽略的异常。