为什么java允许一个总是抛出异常的方法将返回类型声明为异常?

时间:2013-11-07 19:02:53

标签: java exception

为什么java允许一个总是抛出异常的方法将返回类型声明为异常? 以下两种方法都有效: -

public RuntimeException alwaysFails() {
    throw new RuntimeException("failed");
}

public void alwaysFailsButVoid() {
    throw new RuntimeException("failed");
}

允许这样做有什么好处?

3 个答案:

答案 0 :(得分:11)

您可以将任何类型声明为方法的返回类型。由于该方法永远不会正常返回,因此这是完全正确的(但具有误导性)。

请注意,Java编译器无法确定您的方法何时可能正常返回(通常是由于暂停问题无法解决)。

允许此操作的好处是允许您子类化类或继承已预先指定该方法的返回类型的接口。这对于面向对象的编程至关重要。

答案 1 :(得分:4)

返回和投掷不是一回事,他们是独立的。

答案 2 :(得分:0)

我没有看到这个问题。返回类型和可能的异常之间没有编译时交叉检查。没有关系。编译器只检查查看哪些检查异常是可能的,以及关于异常声明了哪些异常(显然,编译器除此之外还做了很多)。