finally中执行return,会影响所有从trycatch中抛出的未处理的Throwable向外传播。

下列代码演示了这个规则。 开发者期望在控制台获得"ERROR",但显示的是"OK"。

public static void main(String[] args) {
  try {
    doSomethingWhichThrowsException();
    System.out.println("OK");
  } catch (RuntimeException e) {
    System.out.println("ERROR");
  }
}

public static void doSomethingWhichThrowsException() {
  try {
    throw new RuntimeException();
  } finally {
    /* ... */
    return;                                        // Non-Compliant - prevents the RuntimeException from being propagated
  }
}