Throwing an exception from within a finally block will mask any exception which was previously thrown in the try or catch
block.
The masked's exception message and stack trace will be lost.
try {
/* some work which end up throwing an exception */
throw new IllegalArgumentException();
} finally {
/* clean up */
throw new RuntimeException(); // Noncompliant; will mask the IllegalArgumentException
}
try {
/* some work which end up throwing an exception */
throw new IllegalArgumentException();
} finally {
/* clean up */ // Compliant
}