【问题标题】:Why could the subclass method throw error为什么子类方法会抛出错误
【发布时间】:2020-07-04 07:40:09
【问题描述】:

我试试这段代码,编译器没有给出任何问题,我想知道 Bar 中的 validate 方法不会抛出任何东西,AssertionError 或 AssertionError 的子类。但是代码中Error是AssertionError的超类,为什么没有问题发生

abstract class Foo {
abstract void validate() throws AssertionError;
}

class Bar extends Foo {
void  validate() throws  Error  {}
}

【问题讨论】:

    标签: java throw


    【解决方案1】:

    您描述的编译器规则适用于检查异常。已检查的异常是 ThrowableException 和所有扩展 Exception 的异常,不包括 RuntimeException 及其后代。 AssertionErrorError 都扩展了 Error,这使得它们未被选中。这意味着您可以将它们扔到任何地方而编译器不会抱怨。最后一种行为也适用于RuntimeException,例如NullPointerException

    完整的树是这样的:

    Throwable (checked)
    -Exception (checked)
    --RuntimeException (unchecked)
    -Error (unchecked)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      • 2016-01-04
      • 1970-01-01
      • 2015-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多