Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java Exception as checked Exception but not required to be thrown in trycatch

Tags:

java

exception

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.

like image 988
chiperortiz Avatar asked Jan 28 '23 12:01

chiperortiz


1 Answers

It is explained in the Java Language Specification (emphasis in bold):

It is a compile-time error if a catch clause can catch checked exception class E1 and it is not the case that the try block corresponding to the catch clause can throw a checked exception class that is a subclass or superclass of E1, unless E1 is Exception or a superclass of Exception.

I guess the rationale behind this is that: MyException is indeed a checked exception. However, unchecked exceptions also extend Exception (transitive inheritance from RuntimeException), so having a catch include the Exception class is excluded from the exception analysis done by the compiler.

like image 113
M A Avatar answered Jan 31 '23 19:01

M A