Why in Java can we catch an Exception even if it is not thrown, but we can\'t catch it\'s subclass (except for \"unchecked\" RuntimeExceptions and
Because for checked exceptions the method that is throwing them, must explicitly state this fact by 'throws' keyword, thus if a block doesn't have the 'throws IOException' in your case, the compiler has the information it is impossible for an IOException to be thrown, so the whatever you do after catching, it would be unreachable.