During code review I had the following question raised and I didn't know why java didn't complain about an unhandled exception in my code. Here is the code in question that doesn't need a "throws Exception" in the method signature:
private void foo() {
    try {
        String s = "Hello, world.";
        return;
    } catch (Exception ex) {
        throw ex;
    }
}
Here is the code that would show an unhandled exception message unless I declare a "throws Exception" in the method signature.
private void bar() throws Exception {
    try {
        String s = "Hello, world.";
        return;
    } catch (Exception ex) {
        throw new Exception();
    }
}
Why does bar() require a throws keyword in the method signature and foo() doesn't? They both are throwing Exception and they are both "handled" by the catch clause.
****EDIT****
The link to the other question isn't helpful to me yet. Could someone explain how that answer is relevant to this one? Thanks.