Nullpointerexception被认为是运行时异常,并且不需要在抛出它的方法签名中声明所有运行时异常。但是,NullPointerException给我一个编译错误说 - 未处理的异常!为什么会这样?
1...void doMore(){
2... throw new NullPointerException();
3...}
第2行显示编译错误但是如果抛出任何其他运行时异常(如NullArgumentException)则没有编译错误。 NullPointerException真的是未经检查的异常吗?
答案 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();
}