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

前端 未结 2 497
半阙折子戏
半阙折子戏 2021-01-20 00:37

I have this snippet.

public final class StackOverflow{
   class MyException extends Throwable{
   }
   private void a(){
       try{
       }catch(MyExceptio         


        
相关标签:
2条回答
  • 2021-01-20 00:53

    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.

    0 讨论(0)
  • 2021-01-20 00:53

    Exception extends from RuntimeException will considered as uncheched exception, so it's ok:

    class MyException extends RuntimeException { }
    
    try {
        ...
    } catch (MyException e) {
    
    }
    

    Your exception extends from Throwable, so it is cheched exception. Since the compiler noticed that it is never thrown, so the compile fails.

    0 讨论(0)
提交回复
热议问题