在try / catch块之后,方法是否返回一个对象需要返回null语句?

时间:2017-10-11 21:24:04

标签: java

我遇到了以下代码段。一种方法需要return语句,但另一种方法不需要。我相信Case 2)需要“return null”语句,但编译器会抱怨。我不知道为什么。

案例1)如果我删除“return null”语句,编译器会抱怨它需要它。

 private Foo createFoo(Bar bar, Baz baz) throws SomeException {
    try {
        if (...) {
            // perform computation to return foo object
            ......
            return foo;
        } 
        else if (...) {
            // perform computation to return foo object
            ......
            return foo;
        }
    } catch(SomeException se) {
        se.printStackTrace();
        throw se;
    }
    return null;
}

案例2)如果我添加“return null”语句,则编译器会抱怨无法访问的代码。

private Foo createFoo2(Bar bar, Baz baz) throws SomeException {
    try {
        // perform computation to return foo object
        ......
        return foo;
    } catch (SomeException se) {
        se.printStackTrace();
        throw se;
    }
}        

1 个答案:

答案 0 :(得分:1)

在您的第一个示例中,程序流可能会到达方法的最终}。特别是,如果if语句都没有计算到true,则会发生这种情况。所以你需要告诉程序在这种情况下返回什么。

在第二个示例中,程序流不可能到达方法的最终}。因此,在这种情况下告诉程序要返回什么是没有任何意义的;并且编译器通过将其标记为错误来保护您免于编写无意义的内容。