Java Exception as checked Exception但不需要在trycatch中抛出

chi*_*tiz 4 java exception

我有这个片段.

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
Run Code Online (Sandbox Code Playgroud)

我知道Exception也在扩展Throwable,也是一个经过检查的异常,MyException也在扩展Throwable,这也是一个经过检查的异常!

我的问题是为什么不需要在try catch中抛出异常,但MyException是?我认为两者都是检查异常所以哪个区别?

对不起,问题很简单.

man*_*uti 5

它在Java语言规范中进行了解释(以粗体强调):

这是一个编译时错误,如果一个catch子句能赶上检查的异常E1级,这是不是说情况try对应块catch子句可以抛出 checked异常类,它是E1的一个子类或超,除非E1是Exception或超的Exception.

我想这背后的理由是:MyException确实是一个经过检查的例外.但是,未经检查的异常也会扩展Exception(传递继承RuntimeException),因此从编译器执行的异常分析中排除catch包含Exception该类.