-2

Nullpointerexception 被认为是运行时异常,并且不需要在抛出它的方法签名中声明所有运行时异常。但是,NullPointerException 给了我一个编译错误说 - 未处理的异常!为什么会这样?

1...void doMore(){
2...    throw new NullPointerException();
3...}

第 2 行显示编译错误,但如果抛出任何其他运行时异常(如 NullArgumentException),则不会出现编译错误。NullPointerException 真的是未经检查的异常吗?

4

5 回答 5

3

您可以NullPointerException在代码中的任何地方使用 a ,就像任何其他异常一样。但是,作为未经检查的异常,您不必在函数体中声明它,也不必处理它。因此,如果您收到编译器错误,那不是因为NullPointerException代码中的其他问题,而是您没有发布的其他问题。

像这样的方法编译得很好,没有任何错误:

void doSomething() {
    throw new NullPointerException();
}
于 2013-07-04T05:42:10.043 回答
1

不,因为 NullPointerException 扩展了 RuntimeException

方法不需要在其 throws 子句中声明任何可能在方法执行期间抛出但未被捕获的 RuntimeException 子类。

于 2013-07-04T05:36:12.900 回答
0

您可以,但您不必这样做,因为 NPE 是一个未经检查的异常。

于 2013-07-04T05:43:53.697 回答
0

我想“doMore()”方法只是为了证明 NullPointerException 是否是未经检查的异常。我不知道为什么有人需要一种抛出它们的方法。

确实,它是未经检查的。事实上,如果我使用 Eclipse 将代码粘贴到新类中,则不会出现编译器错误。所以我认为这与您的 IDE 配置在相对于空的代码验证方面非常严格有关,或者您的代码片段中没有出现其他一些错误。

于 2013-07-04T05:45:25.060 回答
0

是的,您可以将 NullPointerException 用作代码中的任何其他异常,但没有用,因为您不需要处理代码中的所有运行时异常(未检查)。

在这里,您不会因为声明 NullPointerException 而出现错误,但可能是其他一些编译错误。

在这里你可以参考这个例子:

public static void main(String args[]) {
    String str = null;
    System.out.println(str.length());

    throw new NullPointerException();
}
于 2013-07-04T05:49:08.943 回答