为了避免异常,捕获运行时异常比先前的条件判断更好

时间:2018-05-30 06:42:18

标签: java exception runtimeexception

比如说,当除数为零时,下面的代码可能会抛出运行时异常。

try {
    int result = dividend / divisor;
} catch (Exception e) {
    Log.d("exception:" + e);
}

或者我们可以写如下。

if (divisor != 0) {
    int result = dividend / divisor;
} 

我很困惑哪一个更合理,为什么?

--------------------------------------------- update - --------------------------

我有一个新想法,如果一个方法想要提供除法函数。

public int divide(int dividend, int divisor) throws ArithmeticException {
    if (divisor == 0) {
         throw new ArithmeticException("divide by zero");
    }

    return dividend / divisor;
}

在来电者中,

try {
    int result = divide(dividend, divisor);
} catch (Exception e) {
    Log.d("exception:" + e);
}

if (divisor != 0) {
    int result = divide(dividend, divisor);
} 

无论性能如何,两者似乎都没有问题。不是吗?

3 个答案:

答案 0 :(得分:2)

绝对可以使用条件!

抛出和捕获异常非常慢,比检查某个数字是否等于0要慢得多。ArrayIndexOutOfBoundsException(检查索引是否大于0且小于数组长度){} { {1}}(检查对象是否为空),NullPointerException(在调用NumberFormatException之类的内容之前检查字符串格式是否正确。)

错误处理不适用于流量控制。当您使用Integer.parseInt时,您正在处理您无法控制的内容。许多方法都检查了异常,这些是您应该捕获的异常。

答案 1 :(得分:1)

如果您只有一个if条件,那么if (divisor != 0)是合理的,但想象多个分区,其值可能会在运行时更改,那么很多if-else是头痛和异常(可能是您的定制)是更好的方法。

希望这有帮助。

答案 2 :(得分:0)

第二个代码块在处理数学计算时更好。