Лучше ли ловить исключение во время выполнения, чем определение условий ранее, чтобы избежать исключения - PullRequest
0 голосов
/ 30 мая 2018

Скажем, приведенные ниже коды могут выдавать исключение времени выполнения, когда делитель равен нулю.

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 голосов
/ 30 мая 2018

Определенно используйте условные выражения, когда можете!

Бросать и перехватывать исключения очень медленно, гораздо медленнее, чем проверка того, равно ли какое-либо число 0. То же самое относится и к ArrayIndexOutOfBoundsException (проверка, является ли индекс больше 0 и меньше длины массива), NullPointerException (проверить, является ли объект нулевым), NumberFormatException (проверить, имеет ли строка правильный формат, перед вызовом таких вещей, как Integer.parseInt).

Обработка ошибок не для управления потоком.Когда вы используете try...catch, вы обрабатываете то, что действительно не можете контролировать.Многие методы проверяют исключения, и это те исключения, которые вы должны перехватить.

0 голосов
/ 30 мая 2018

Второй блок кода лучше при работе с математическими вычислениями.

0 голосов
/ 30 мая 2018

Если у вас есть только одно условие if, тогда if (divisor != 0) является разумным, но представьте себе несколько делений, где их значение может измениться во время выполнения, тогда так много if-else - это головная боль, и лучше использовать исключение (может быть вашим).

Надеюсь, это поможет.

...