I have this snippet.
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
I know that Exception is extending Throwable as well and also is a checked exception also MyException is extending Throwable which mades also a checked exception!
My question is why Exception is not required to be thrown in the try catch but MyException is? I think that both are checked exception so which is the difference??
Sorry if the question is simple.
It is explained in the Java Language Specification (emphasis in bold):
I guess the rationale behind this is that:
MyException
is indeed a checked exception. However, unchecked exceptions also extendException
(transitive inheritance fromRuntimeException
), so having acatch
include theException
class is excluded from the exception analysis done by the compiler.Exception extends from
RuntimeException
will considered as uncheched exception, so it's ok:Your exception extends from
Throwable
, so it is cheched exception. Since the compiler noticed that it is never thrown, so the compile fails.