是否在方法签名中声明了NullPointerException?

时间:2013-07-04 05:34:06

标签: java nullpointerexception

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

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

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

5 个答案:

答案 0 :(得分:3)

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

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

void doSomething() {
    throw new NullPointerException();
}

答案 1 :(得分:1)

不,因为NullPointerException扩展了RuntimeException

  

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

答案 2 :(得分:0)

您可以,但您不必,因为NPE是未选中例外。

答案 3 :(得分:0)

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

确实,它没有被检查。实际上,如果我使用Eclipse将代码粘贴到新类中,则不会出现编译器错误。所以我认为这与你的IDE配置严格相关的代码验证有关,或者你的代码片段中没有出现其他错误。

答案 4 :(得分:0)

是的,您可以将NullPointerException用作代码中的任何其他异常,但由于您不需要处理代码中的所有运行时异常(未选中),因此无效。

由于声明了NullPointerException,因此您没有收到错误,但可能是其他一些编译错误。

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

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

    throw new NullPointerException();
}