Изменения

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

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

1486 байт добавлено, 18:10, 10 июня 2014
Методы обработки ошибок
Double f(Double a, Double b) {
<font color=navy>'''if '''</font> ((a == <font color=navy>'''null'''</font>) || (b == <font color=navy>'''null'''</font>)) { <font color=navy>'''return null'''</font>;
}
<font color=gray>//...</font> <font color=navy>'''if '''</font> (Math.''abs''(b) < EPS) { <font color=navy>'''return null'''</font>; } <font color=navy>'''else '''</font> { <font color=navy>'''return '''</font> a / b;
}
}
Double d = f(a, b);
<font color=navy>'''if '''</font> (d != <font color=navy>'''null'''</font>) { <font color=gray>//...</font> } <font color=navy>'''else '''</font> { <font color=gray>//...</font>
}
'''3.'''Использовать флаг ошибки: при возникновении ошибки устанавливать флаг в соответствующее значение:
<font color=navy>'''boolean '''</font> <font color=purple>'''error'''</font>;
Double f(Double a, Double b) {
<font color=navy>'''if '''</font> ((a == <font color=navy>'''null'''</font>) || (b == <font color=navy>'''null'''</font>)) { <font color=purple>'''error '''</font> = <font color=navy>'''true'''</font>; <font color=navy>'''return null'''</font>;
}
<font color=gray>//...</font> <font color=navy>'''if '''</font> (Math.''abs''(b) < <font color=purple>'''EPS'''</font>) { <font color=purple>'''error '''</font> = <font color= navy>'''true'''</font>; <font color=navy>'''return '''</font> b; } <font color=navy>'''else '''</font> { <font color=navy>'''return '''</font> a / b;
}
}
<font color=purple>'''error '''</font> = <font color= navy>'''false'''</font>;
Double d = f(a, b);
<font color=navy>'''if '''</font> (<font color=purple>'''error'''</font>) { <font color=gray>//...</font> } <font color=navy>'''else '''</font> { <font color=gray>//...</font>
}
Минусы такого подхода аналогичны минусам использования кодов возврата.
'''4.'''Можно вызвать метод обработки ошибки и возвращать то, что вернет этот метод.
Double f(Double a, Double b) {
<font color=navy>'''if '''</font> ((a == <font color=navy>'''null'''</font>) || (b == <font color=navy>'''null'''</font>)) { <font color=navy>'''return '''</font> nullPointer();
}
<font color=gray>//...</font> <font color=navy>'''if '''</font> (Math.''abs''(b) < EPS) { <font color=navy>'''return '''</font> divisionByZero(); } <font color=navy>'''else '''</font> { <font color=navy>'''return '''</font> a / b;
}
}
'''5.'''В случае ошибки просто закрыть программу.
<font color=navy>'''if '''</font> (Math.''abs''(b) < <font color=purple>'''EPS'''</font>) { System.''exit''(<font color=navy>0</font>); <font color=navy>'''return this'''</font>;
}
Это приведет к потере данных, также невозможно понять, в каком месте возникла ошибка.
234
правки

Навигация