Consider the following code
public void myMethod1() {
try {
this.getClass().getMethod("myMethod").invoke(this);
} catch (Exception e) {
throw e;
}
}
public void myMethod1_fixed() throws Exception {
try {
this.getClass().getMethod("myMethod").invoke(this);
} catch (Exception e) {
throw e;
}
}
public void myMethod2() {
try {
this.getClass().getMethod("myMethod").invoke(this);
} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
} catch (Exception e) {
throw e;
}
}
myMethod1() was complaining about not handling the Exception e being thrown, which I understand because Exception is checked exception and you are forced to handle it, hence the myMethod1_fixed() added throws Exception and it was happy.
Now with myMethod2() it also throws Exception e, but it was happy even though there was no throws Exception, meaning Exception is unchecked?
RuntimeException.