我有这个片段。
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
我知道 Exception 也扩展了 Throwable,并且也是一个已检查的异常,MyException 也扩展了 Throwable,这也成为了一个已检查的异常!
我的问题是为什么在 try catch 中不需要抛出 Exception 而 MyException 却是?我认为两者都是检查异常,那么有什么区别?
抱歉,如果问题很简单。
它的解释在Java语言规范(强调以粗体显示):
如果出现以下情况,则这是一个编译时错误catch
clause 能赶上检查异常类 E1,但情况并非如此try
对应的块catch
clause 可以扔作为 E1 的子类或超类的检查异常类,除非 E1 是Exception
或一个超类Exception
.
我想这背后的理由是:MyException
确实是一个受检查的异常。然而,未经检查的异常也延伸Exception
(传递继承自RuntimeException
),所以有一个catch
包括Exception
类被排除在编译器执行的异常分析之外。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)