eugene_leshchinskiy
@eugene_leshchinskiy

Какие эксэпшены использовать?

Привет) Какой ход мыслей/алгоритм должен быть при выборе Exception'a?
Вот я например написал класс:
import java.util.Scanner;

public class Scan {
    private  Scanner scanner = new Scanner(System.in);

    public int scanInt() {
        try{
            return scanner.nextInt();
        }
        catch (Exception exc){
            return 0;
        }
    }
}

Не обращайте внимания на код пожалуйста, это пример. С чего бы мне использовать Exception, а не сразу Throwable? Может все ошибки сразу перехватывать через Throwable? Какой смысл использования более низких в иерархии исключений? И еще вопрос касательно этого примера) Стоит использовать Error-handling внутри метода, или же использовать throws и отловить в main() ? Чем руководствоваться?
Спасибо!
  • Вопрос задан
  • 246 просмотров
Решения вопроса 1
jamakasi666
@jamakasi666 Куратор тега Java
Просто IT'шник.
Если класс не делает ничего критически важного в программе то можно и нужно обрабатывать все исключения внутри этого класса. Если же класс выполняет какие то критические действия то вероятнее всего обрабатывать исклюения внутри класса может быть очень опасно и лучше их ловить уровнем выше.
Не критичный пример: класс рисует картинку на экран, если пара пикселей будет каким либо образом при обработке null и ты перехватишь это исключение заменив ошибочный пиксель белым то ничего криминального не случится. А вот если ты будешь ловить исключение уровнем выше то будет много лишнего гемороя и кода.
Критичный пример: класс работает с базой данных в который хранятся данные о людях, происходит ошибка, скажем, с доступом к бд, ты поймал исключения внутри самого класса и вместо того чтобы вернуть, например, "Иванова А.П.", у тебя случилось исключение и ты вместо того чтобы выкинуть исключение вверх прикидываешься шлангом и возвращаешь что таких нет. Код где то дальше видя что все нормально и "Иванова А.П." нет в базе спокойно создает там нового(соединение с бд могло восстановиться к этому моменту) вместо того чтобы обновить запись. Т.е. в такой ситуации обрабатывать исключения внутри класса просто неправильно в большинстве случаев т.к. железо бетонно его надо обрабатывать выше и в случае ошибки обращения к бд отвалиться и пробовать все снова.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Rou1997
@Rou1997
Стоит использовать Error-handling внутри метода, или же использовать throws и отловить в main() ?

В данном примере вы пишете свой Util-класс, конечно в нем нужно исправить недочет разработчиков Java, ведь nextInt который выбрасывает проверяемое (checked) исключение это явный перегиб, который сильно усложняет код, поэтому делайте обработку внутри своего Util-метода, в случае исключения делайте возврат null, можете разработать и применить свой механизм логирования, более гибкий и удобный.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
18 апр. 2024, в 01:12
150000 руб./за проект
18 апр. 2024, в 00:10
50000 руб./за проект