If-Else语句与Exception-Catcher?

时间:2013-05-17 00:04:39

标签: java exception if-statement try-catch

我厌倦了在我的代码中添加看似无穷无尽的if-else语句,所以我想知道如果我只是抓住异常,如果某些事情不对,那么更好的做法。例如。而不是说:

public static boolean firstStringOfArrayIsTheSameAsTheWord(String word, String[] array) {
    if(word != null) {
        if(array.length > 0) {
            return word.equalsIgnoreCase(array[0]);
        }
    }
    return false;
}

我只是:

public static boolean firstStringOfArrayIsTheSameAsTheWord(String word, String[] array) {
    try {
        return word.equals(array[0]);
    } catch(/*NullPointerException or an ArrayIndexOutOfBoundsException*/ Exception e) {
        return false;
    }
}

请注意,我确实知道我可以在if语句中使用多个参数,但我只关心在实践中哪种方法更好用,以及为什么。

提前致谢!

5 个答案:

答案 0 :(得分:6)

不,这不是一个好主意,那就是滥用异常处理。

您应该避免不必要的异常捕获,异常应仅用于出错的事情,因为它们不在您的控制范围内,而不是正常程序流程的一部分。此外,正如@ SJuan76所说,你将隐藏存在真正异常的情况。

如果您厌倦了使用if-else语句,则可以尝试使用switch(在Java 7中甚至work for strings)或改进应用程序中的polymorphism

答案 1 :(得分:4)

一般规则是,“使用异常事件的异常,永远不使用控制流”。

请使用if(...) else ...

答案 2 :(得分:3)

首先,IIRC正确的异常处理很慢。不是非常慢,但是你想在主流逻辑中使用什么。

其次,通过这种方式工作,您将隐藏存在真实异常的情况。您的用户将尝试加载文件,但只会发现文件未加载,不知道文件是否未找到,数据是否已损坏,等等。你丢失了很多信息。

如果你想让你的代码更简单,最好做一些像

这样的事情
/**
 * ....
 * @param word String must not be null.
 * @param array String[] must not be null, have length at least 1, an array[0] must not be null
 */
public static boolean firstStringOfArrayIsTheSameAsTheWord(String word, String[] array) {
  return word.equals(array[0]);
}

至少您将用于清理参数的责任委派给使用您的方法的代码。这不是一个明智的事情(它违背了防御性编程),你的同事会讨厌使用你的代码,但比你的第一种方法更好。

答案 3 :(得分:0)

do {
    if (conditionA) {
        something;
    }
    else {
        break;
    }
    if (conditionB) {
        somethingElse;
    }
    else {
        break;
    }
    ...
} while(false);

答案 4 :(得分:0)

异常方法不是一个好主意。 抛出异常 它很慢 2.使您的应用程序不可读。 正如@greedybuddha所说的那样“对特殊事件使用例外,从不使用控制流”。