Tengo este fragmento.
public final class StackOverflow{
class MyException extends Throwable{
}
private void a(){
try{
}catch(MyException | Exception e){
}
}
}
exception StackOverflow.MyException is never thrown in body of corresponding try statement
Sé que se está extendiendo excepción Throwable, así y también es una excepción comprobada también MiExcepción está extendiendo Throwable que también mades una excepción comprobada!
Mi pregunta es ¿por qué no se requiere Excepción para ser lanzado en el intento de captura, pero MiExcepción es? Creo que tanto se comprueban excepción por lo que es la diferencia ??
Lo siento si la pregunta es simple.
Se explica en el lenguaje Java Especificación (subrayado en negrita):
Es un error en tiempo de compilación si una
catch
cláusula puede coger comprobado clase de excepción E1 y no es el caso de que eltry
bloque correspondiente a lacatch
cláusula puede lanzar una clase de excepción comprobado que es una subclase o superclase de E1, a no ser que E1 esException
o una superclase deException
.
Supongo que la razón detrás de esto es que: MyException
es de hecho una excepción comprobada. Sin embargo, las excepciones sin marcar, también se extienden Exception
(herencia transitivo de RuntimeException
), por lo que tiene un catch
incluyen la Exception
clase se excluyó del análisis excepción hecha por el compilador.