捕获运行时异常是否比以前进行条件判断以避免异常更好



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

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);
} 

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

如果可以,一定要使用条件!

抛出和捕获异常非常慢,比检查某个数字是否等于 0 要慢得多。ArrayIndexOutOfBoundsException(检查索引是否大于 0 且小于数组长度(、NullPointerException(检查对象是否为 null(、NumberFormatException(在调用Integer.parseInt之类的东西之前检查字符串的格式是否正确(也是如此。

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

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

希望这有帮助。

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

最新更新