有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

Nullpointerexception被视为运行时异常,所有运行时异常都不需要在引发它的方法签名中声明。但是,NullPointerException给了我一个编译错误,说-UnhandledException!为什么会这样

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

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


共 (5) 个答案

  1. # 1 楼答案

    不,因为NullPointerException扩展了RuntimeException

    A method is not required to declare in its throws clause any subclasses of RuntimeException that might be thrown during the execution of the method but not caught.

  2. # 2 楼答案

    可以,但不必,因为NPE是一个未经检查的异常

  3. # 3 楼答案

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

    事实上,这是不受约束的。事实上,如果我使用Eclipse将您的代码粘贴到一个新类中,就不会出现编译器错误。所以我认为这与IDE配置对空相对代码验证的严格要求有关,或者与代码片段中没有出现的其他错误有关

  4. # 4 楼答案

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

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

    void doSomething() {
        throw new NullPointerException();
    }
    
  5. # 5 楼答案

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

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

    在这里,您可以参考以下示例:

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