有 Java 编程相关的问题?

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

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

比如,当除数为零时,下面的代码可能会引发运行时异常

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

或者我们可以这样写

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

我不知道哪一个更合理,为什么

---------------------------------------------------更新---------------------------

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

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) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

    如果您只有一个if条件,那么if (divisor != 0)是合理的,但是想象一下多个分区在运行时它们的值可能会发生变化,那么太多if-else是令人头痛的,而异常(可能是您的习惯)是更好的方法

    希望这有帮助

  3. # 3 楼答案

    尽可能使用条件句

    抛出和捕获异常非常慢,比检查某个数字是否等于0慢得多。这同样适用于ArrayIndexOutOfBoundsException(检查索引是否大于0且小于数组长度),NullPointerException(检查对象是否为空),NumberFormatException(在调用Integer.parseInt之前检查字符串的格式是否正确)

    错误处理不适用于流控制。当你使用try...catch时,你正在处理一些你真的无法控制的事情。许多方法都检查了异常,这些是您应该捕获的异常