从方法,“try”块或“catch”块后返回?

时间:2016-05-01 10:24:02

标签: java exception try-catch

以下两种方法之间有什么区别吗?

哪一个更可取,为什么?

PRG1:

<script>
    function reqListener () {
      console.log(this.responseText);
    }
    var oReq = new XMLHttpRequest();
    oReq.onload = function() {
        alert(this.responseText);
    };
    oReq.open("get", "http://localhost/send.php", true);
    oReq.send();
</script>

PRG2:

public static boolean test() throws Exception {
    try {
        doSomething();
        return true;
    } catch (Exception e) {
        throw new Exception("No!");
    }    
}

5 个答案:

答案 0 :(得分:24)

考虑这些你没有返回常量表达式的情况:

案例1:

public static Val test() throws Exception {
    try {
        return doSomething();
    } catch (Exception e) {
        throw new Exception("No!");
    }
    // Unreachable code goes here
}

案例2:

public static Val test() throws Exception {
    Val toReturn = null;
    try {             
        toReturn = doSomething();
    } catch (Exception e) {
        throw new Exception("No!");
    }
    return toReturn;
}

我更喜欢第一个。第二个更冗长,在调试时可能会引起一些混乱。

如果test()错误地返回null,并且您看到toReturn被初始化为null,您可能会认为问题出在test()中(尤其是{ {1}}不仅仅是一个简单的例子。

即使test()返回null,它也只能返回doSomething。但这可能很难一目了然。

然后你可以争辩说,为了保持一致,总是使用第一种形式会更好。

答案 1 :(得分:4)

两种方法之间没有区别。 通过尽快恢复程序流并处理异常,它将在两种情况下有效地返回真值。 只有在发生异常时才会访问Catch。

答案 2 :(得分:3)

没有功能差异。两个程序的行为方式相同。 这只是编码风格和个人品味的问题。

作为一种好的做法,每个方法最好有一个return语句 - 在方法的最后,而不是中间。在冗长的代码块的情况下,当(原作者或其他人)必须对代码进行更改时,这种样式使代码在将来更具可读性和可维护性。

因此,从良好的实践角度来看,第一个被认为是更好的。

答案 3 :(得分:2)

我假设这是一个普遍的问题。否则,我可能会评论您的方法的其他方面。

我认为在这种情况下或类似的小方法并不重要。该方法足够短,可以立即了解发生了什么,与什么有关等等。

然而,在更长的方法的情况下,在第一个例子中更容易遵循流程。 在我看来。它将相关代码和相关场景保持在一起。当您正在阅读该方法时,catch块不会破坏正常的执行流程,使其更加明显,并且流畅#34;

public static boolean test() throws Exception {
    try {
        doSomething();
        return true;
    } catch (Exception e) {
        throw new Exception("No!");
    }    
}

但是我并没有为所有方法概括这一点;它完全与背景有关。

答案 4 :(得分:-5)

没有区别,但第一个Prg1比Prg2快。