Throwing an exception from within a finally block will mask any exception which was previously thrown in the try or catch
block, and 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; masks the IllegalArgumentException
}
try {
/* some work which end up throwing an exception */
throw new IllegalArgumentException();
} finally {
/* clean up */
}