Java error de compilación de bloque de captura inalcanzable

Por qué en Java podemos atrapar unException incluso si no se lanza, pero no podemos atrapar su subclase (excepto "desmarcado"RuntimeException sy subclases). Código de ejemplo:

class Test {
    public static void main(String[] args) {
        try {
            // do nothing
        } catch (Exception e) {
            // OK           
        }

        try {
            // do nothing
        } catch (IOException e) {
               // COMPILER ERROR: Unreachable catch block for IOException.
               //This exception is never thrown from the try statement body
        }       
    }
}

¿Algunas ideas

Respuestas a la pregunta(6)

Su respuesta a la pregunta