Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为了避免异常,捕获运行时异常是否比之前的条件判断更好_Java_Exception_Runtimeexception - Fatal编程技术网

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

Java 为了避免异常,捕获运行时异常是否比之前的条件判断更好,java,exception,runtimeexception,Java,Exception,Runtimeexception,比方说,当除数为零时,下面的代码可能引发运行时异常 try { int result = dividend / divisor; } catch (Exception e) { Log.d("exception:" + e); } 或者我们可以这样写 if (divisor != 0) { int result = dividend / divisor; } 我不知道哪一个更合理,为什么 ---------------------------------------

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

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
条件,那么
If(divisior!=0)
是合理的,但是想象一下多个分区在运行时它们的值可能会发生变化,那么如此多的
If else
是令人头痛的,异常(可能是您的自定义)是更好的方法


希望这有帮助。

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

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


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

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

这取决于需求。理想情况下,建议将异常委托给调用方(在这种情况下,应该从
if
块中抛出一个异常,如
IllegalArgumentException
,这取决于此代码的位置。如果它是接受输入的代码,那么也许您应该验证
除数
输入,甚至不尝试计算它何时为0。否则我将无法捕获异常并将允许JVM为负责验证输入以处理运行时异常的人提出异常。但这是一个意见问题。异常的一个优点是将丑陋的“错误处理”代码与“常规”代码分离代码。见@Saint我的答案在哪里否定了这句话?这就是投否决票的原因吗?对不起,我不能完全理解你在评论中的意思。我没有做任何事情包括投否决票。你和清扫者的答案都是合理的。
if (divisor != 0) {
    int result = divide(dividend, divisor);
}