首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为了避免异常,捕获运行时异常比先前的条件判断更好吗

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

Stack Overflow用户
提问于 2018-05-30 14:42:18
回答 3查看 133关注 0票数 2
代码语言:javascript
复制
try {
    int result = dividend / divisor;
} catch (Exception e) {
    Log.d("exception:" + e);
}

或者我们可以这样写。

代码语言:javascript
复制
if (divisor != 0) {
    int result = dividend / divisor;
} 

代码语言:javascript
复制
public int divide(int dividend, int divisor) throws ArithmeticException {
    if (divisor == 0) {
         throw new ArithmeticException("divide by zero");
    }

    return dividend / divisor;
}

在调用者中,

代码语言:javascript
复制
try {
    int result = divide(dividend, divisor);
} catch (Exception e) {
    Log.d("exception:" + e);
}

代码语言:javascript
复制
if (divisor != 0) {
    int result = divide(dividend, divisor);
} 

不管性能如何,两者似乎都没有问题。难到不是么?

EN

回答 3

Stack Overflow用户

发布于 2018-05-30 14:47:43

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

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

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

票数 2
EN

Stack Overflow用户

发布于 2018-05-30 14:46:46

如果你只有一个if条件,那么if (divisor != 0)是合理的,但是想象一下多个分区,它们的值可能在运行时改变,那么这么多的if-else是令人头疼的,而exception(可能是您的习惯)是更好的方法。

希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2018-05-30 14:48:26

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50597912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档