寻找以下验证:
在实现/重写的方法中,Java仅关注声明被抛出的已检查异常。
例如:到界面:
interface INT { void mm() throws IOException, ArrayIndexOutOfBoundsException; }
,
class Some implements INT {
void mm() {...}
// ...
}
没有给出检查错误。以下内容(因为NullPointerException
是RunimeException
):
class Some implements INT {
void mm() throws NullPointerException {...}
// ...
}
而
class Some implements INT {
void mm() throws ActivationException {...}
// ...
}
给出编译器错误,因为ActivationException
是一个经过检查的异常,并且它的超类实现不会抛出它(或它的子类)。
请注意:
class Some implements INT {
void mm() throws IndexOutOfBoundsException {...}
// ...
}
不会给出编译时错误,尽管IndexOutOfBoundsException
超出ArrayIndexOutOfBoundsException
,因为它们是运行时异常。
另请注意:
class Some implements INT {
void mm() throws Exception {...}
// ...
}
给出了一个检查错误,因为Exception
也可以是一个已检查的异常,并且超出了被覆盖的异常。
总的来说,
声明在重写方法中抛出的异常仅在编译错误时才会出现编译器错误,如果它是一个已检查的异常并且它不是(或者它的超类型不是)被抛出超类的重写方法。
exception handling in the implemented method更加精细和广泛。再问一遍 - 无法得到答案 那里有更窄的版本。
TIA。