...
| Code Block | ||
|---|---|---|
| ||
class TryFinally {
private static boolean doLogic() {
try {
throw new IllegalStateException();
} finally {
System.out.println("logic done");
}
// Any return statements must go here;
// applicable only when exception is thrown conditionally
}
}
|
Exceptions
ERRO4-J-EX0: Control flow statements whose destination is within the finally block are perfectly acceptable. For example, the following code does not violate this rule because the break statement exits within the while loop but not within the finally block:
...
Abrupt completion of a finally block masks any exceptions thrown inside the associated try and catch blocks.
Rule | Severity | Likelihood |
|---|
Detectable | Repairable | Priority | Level |
|---|---|---|---|
ERR04-J | Low | Probable | Yes |
Yes |
P6 |
L2 |
Automated Detection
Tool | Version | Checker | Description | ||||||
|---|---|---|---|---|---|---|---|---|---|
| Coverity | 7.5 | PW.ABNORMAL_TERMINATION_ OF_FINALLY_BLOCK | Implemented | ||||||
| Klocwork |
| JD.FINRET | |||||||
| Parasoft Jtest |
| CERT.ERR04.ARCF CERT.ERR04.ATSF | Avoid using 'return's inside 'finally blocks if thare are other 'return's inside the try-catch block Do not exit "finally" blocks abruptly | ||||||
| PVS-Studio |
| V6051 | |||||||
| SonarQube |
| S1143 | Jump statements should not occur in "finally" blocks |
Related Guidelines
Bibliography
Puzzle 36. Indecision | |
Section 8.2, "Managing Exceptions, The Vanishing Exception" | |
[JLS 2015] |
...
...