在finally中执行return,会影响所有从try或catch中抛出的未处理的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
}
}