Изменения

Перейти к: навигация, поиск

Обработка ошибок и исключения

1289 байт добавлено, 14:55, 12 октября 2013
Методы обработки ошибок
==Методы обработки ошибок==
#'''1.''' Не обрабатывать.#'''2.''' Коды возврата. Основная идея {{---}} в случае ошибки возвращать специальное значение, которое не может быть корректным. Например, если в методе есть операция деления, то придется проверять делитель на равенство нулю:  Double f(Double a, Double b) { if ((a == null) || (b == null)) { return null; } //... if (Math.abs(b) < EPS) { return null; } else { return a / b; } } При вызове метода необходимо проверить возвращаемое значение:  Double d = f(a, b) if (d != null) { //... } else { //... } Минусом такого подхода является необходимость проверки возвращаемого значения каждый раз при вызове метода. Кроме того, не всегда возможно определить тип ошибки.#'''3.'''Использовать флаг ошибки: при возникновении ошибки устанавливать флаг в соответствующее значение: boolean error; Double f(Double a, Double b) { if ((a == null) || (b == null)) { error = true; } //. .. if (Math.abs(b) < EPS) { error = true; return b; } else { return a / b; } }  error = false; Double d = f(a, b) if (error) { //... } else { //... } Минусы такого подхода аналогичны минусам использования кодов возврата.#'''4.'''Можно вызвать метод обработки ошибки и возвращать то, что вернет этот метод. Double f(Double a, Double b) { if ((a == null) || (b == null)) { return nullPointer(); } //... if (Math.abs(b) < EPS) { return divisionByZero(); } else { return a / b; } } Но в таком случае не всегда возможно проверить корректность результата вызова основного метода.#'''5.'''В случае ошибки просто закрыть программу. if (Math.abs(b) < EPS) { System.exit(0); return this; }Это приведет к потере данных, также невозможно понять, в каком месте возникла ошибка.
==Исключения==
234
правки

Навигация