powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / подскажите что почитать про исключения
25 сообщений из 76, страница 2 из 4
подскажите что почитать про исключения
    #39187229
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyтакая формулировка тоже годится, даже если кто-то меня обманул... только все ваши горячие выпады - идут лесом.

P.S. Царская Россия, юрфак, старый профессор (внутренне негодуя - не бабское это дело) экзаменует студентку.
Студентка отлично отвечает и профессор решает задать шокирующий вопрос, чтобы, таки, поставить неуд.
П. - Если бы я попытался вас изнасиловать, то как бы вы квалифицировали мои действия?
С. - Как попытку с негодными средствами!
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39187247
grok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usmangrok,

http://neerc.ifmo.ru/wiki/index.php?title=Обработка_ошибок_и_исключения

спасибо.
в принципе, кое-что новое для себя узнал.

например, вот это не знал:
авторNB: Если JVM выйдет во время выполнения кода из try или catch, то finally-блок может не выполниться. Также, например, если поток выполняющий try или catch код остановлен, то блок finally может не выполниться, даже если приложение продолжает работать.

но всё же остались вопросы.
в основном по "best practices"

1) оборачивать почти все стандартные исключения в свои - допустимо ?
2) rethrow без оборачивания - нормальная практика ?
3) логирование в конструкторах исключений (своих) - нормально ?
4) нормально ли разделять обработку исключений ?
т.е. обработали на одном уровне, rethrow, потом другая обработка на уровне выше

5) и вопрос из области "как работает"
как формируется stackTrace ?
через fillInStackTrace ? я правильно понял ?

возможно это не все вопросы, просто то, что вспомнил сходу.
ну, вы поняли, чего мне примерно хочется.

PS:

к срачу про checked, моё скромное мнение.
не стоит оно того, ловить всё на этапе компиляции.
пусть программа падает, лишь бы красиво и информативно.
ведь есть такая штука как тесты.
специальное место где падать.
а то что не поймалось тестами, не думаю что словите и на компиляции.
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39187273
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grok1) оборачивать почти все стандартные исключения в свои - допустимо ?
2) rethrow без оборачивания - нормальная практика ?
3) логирование в конструкторах исключений (своих) - нормально ?
4) нормально ли разделять обработку исключений ?
т.е. обработали на одном уровне, rethrow, потом другая обработка на уровне вышеJava SE API в целом и исключения, в частности, не могут использоваться "в общем". Надо смотреть конкретную ситуацию и думать, что делать "прямвотздесь".
Скажем, в сервлете:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
try {  /* читаем запрос */ }
catch (IOException e) {
  response.setStatus(SC_BAD_REQUEST);
  return;
}
try { /* передаём запрос на обработку */ }
catch (ТипИсключения e) {
  response.setStatus(SC_BAD_GATEWAY);
  return;
}

совершенно нормально: если возникла исключительная ситуация, то не надо гадать гадать на кофейной гуще можем ли мы продолжить работу - просим контейнер информировать клиента о случившейся неприятности и закругляемся.
И это правильное решение, но для его принятия требуется некоторое знание предметной области и (что важно) - представление о реальной жизни.
Нужно ли протоколировать эти ошибки? Чтение запроса - скорее нет, ошибку обработки запроса - скорее да.
Печатать ли трассу стека? А для чего?
Если строчки в логе недостаточно для идентификации места ошибки, то у вас ещё и протоколирование хреновое.5) и вопрос из области "как работает"
как формируется stackTrace ?
через fillInStackTrace ? я правильно понял ?Если никто не обработал исключение, что JVM сделает это без вашей помощи.
Если исключения обрабатываются, то трасса стека - не лучший вариант.
Таким образом, появление трассировки стека должно свидетельствовать об ошибке, а не быть частью штатной работы системы.
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39187400
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНо является ли плата за его обязательное декларирование и обработку ГАРАНТИЕЙ надёжности
кода.

Нет. Но мне это кажется удобным.

Контролируемые исключения не должны кидаться "далеко"- их надо быстро обрабатывать, либо исправляя ошибку, либо превращая в неконтролируемые.
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39190919
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В качестве небольшого отвлечения. Некоторые читатели топика Java никогда не кодили на С/C++.

Я приведу пример классического приложения на С (сокет-клиент) со ссылкой на
http://www.linuxhowtos.org/data/6/client.c

Обратите внимание на количество строк кода.

Codeblocks отработки ошибок сетевого уроня я отметил желтым маркером.

Обратите также внимание на функцию error которая является
некой точкой агрегации всех ошибок. По сути она не делает
ничего интересного кроме печати месседжа об ошибке и
делает аварийный выход из main к возвратом кода 0
в ОС. По сути она является аналогом catch() блока.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
void error(const char *msg)
{
    perror(msg);
    exit(0);
}

int main(int argc, char *argv[])
{
    int sockfd, portno, n;
    struct sockaddr_in serv_addr;
    struct hostent *server;

    char buffer[256];
    if (argc < 3) {
       fprintf(stderr,"usage %s hostname port\n", argv[0]);
       exit(0);
    }
    portno = atoi(argv[2]);
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
   if (sockfd < 0) 
        error("ERROR opening socket");
    server = gethostbyname(argv[1]);
    if (server == NULL) {
        fprintf(stderr,"ERROR, no such host\n");
        exit(0);
    }
    bzero((char *) &serv_addr, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    bcopy((char *)server->h_addr, 
         (char *)&serv_addr.sin_addr.s_addr,
         server->h_length);
    serv_addr.sin_port = htons(portno);
    if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) 
        error("ERROR connecting");
    printf("Please enter the message: ");
    bzero(buffer,256);
    fgets(buffer,255,stdin);
    n = write(sockfd,buffer,strlen(buffer));
    if (n < 0) 
         error("ERROR writing to socket");
    bzero(buffer,256);
    n = read(sockfd,buffer,255);
    if (n < 0) 
         error("ERROR reading from socket");
    printf("%s\n",buffer);
    close(sockfd);
    return 0;
}



Особняком стоит функция gethostbyname() (). В данном коде она тоже решает вопросы
сетевого уровня но не отрабатывает кода ошибок через perror ()

Если у вас есть другой исходник для реализации тривиального клиент-сервера на С/C++
то я заранее не возражаю. Я просто акцентирую внимание на том что данный способ
или парадигма кодинга продолжает использоваться и в настоящее время.

Прошу каменты.
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39190960
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonили парадигма кодинга продолжает использоваться и в настоящее время.
это только для узких случаев:
- стека практически нет. Один уровень в main
- БЛ нет и управлять исключительными ситуациями не надо. Весь код не делает ничего интересного кроме выплёвывания ошибок в выходной поток.
- т.к. высокая производительность, то в жертву принесено всё остальное удобство от ООП до try и т.д. т.п.
ЗЫ
Прикладной код с поведением пишется совсем по другому.
У данного кода только 2 состояния - ВКЛ\ВЫКЛ
Такое вполне можно применять напр. при сериализации. Будет 2 состояния: Поучилось и НЕполучилось.
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39191043
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123maytonили парадигма кодинга продолжает использоваться и в настоящее время.
это только для узких случаев:
- стека практически нет. Один уровень в main

стек здесь возникает на каждом вызове библиотечной процедуры.

Petro123- БЛ нет и управлять исключительными ситуациями не надо. Весь код не делает ничего интересного кроме выплёвывания ошибок в выходной поток.

Бизнес логика здесь состоит в передаче текста переданного в качестве параметра сообщения на указанный во входном же параметре хост. Это код и делает. А "выплевывание" чего-то во входной поток - это побочный результат деятельности функции.
В общем случае страшно порицаемый изобретателями методик "структурного" программирования.

Petro123- т.к. высокая производительность, то в жертву принесено всё остальное удобство от ООП до try и т.д. т.п.

как можно принести в жертву "удобство ООП" в языке, который про "ООП" ничего не знает?
Это как Ликург в Спарте в 8м веке до нашей эры принес в жертву удобство использования криптовалюты в интернете,
методом запрета денег, сделанных из золота.
В жертву здесь принесена возможность использования представленной функции в сколько-нибудь развитых скриптах автоматизации. Путем возложения на саму функцию задачи "выплевывания" чего-то в выходной поток.
Что при другом заходе должно было бы стать обязанностью того самого скрипта.


Petro123ЗЫ
Прикладной код с поведением пишется совсем по другому.
У данного кода только 2 состояния - ВКЛ\ВЫКЛ
Такое вполне можно применять напр. при сериализации. Будет 2 состояния: Поучилось и НЕполучилось.

Вы ошибаетесь. В смысле выходного состояния у этой функции одно состояние. Всегда ВКЛ. Все получилось.
Могло бы быть и два и больше - прямо по тексту вычитывается как минимум пять разумных состояний возврата,
но автор кода решил обойтись одним.
Принципиально в контексте обсуждения именно checked exceptions не вопрос о том - является ли здесь выдача единственного результата ошибкой программирования (имхо - является, но не это критично важно для безопасного программирования),
а вопрос о том, не разрушается ли весь локальный мир всего того адресного пространства в котором запускается этот код при неудачном вызове.
И ближайшим кандидатом на разрушение мира в этом коде является фрагмент
Код: java
1.
2.
3.
     sockfd = socket(AF_INET, SOCK_STREAM, 0);
   if (sockfd < 0) 
        error("ERROR opening socket");


в котором не происходит попытки закрыть неудачно открытый сокет.
Просмотра только этого фрагмента в общем случае недостаточно, чтобы дать ответ - идет здесь речь о прямой ошибке программирования или нет.
Потребуется знание не только реализации функции socket, но и знание деталей устройства конкретной операционной системы,
в рамках которого код может оказаться вполне безопасным в смысле блокировки/потери ресурса.

Вероятно, рассматривание кода примерно такого сорта сорта и должно наводить на желание вписать прямо в контракт функции socket
обязанность по обработке контролируемого исключения.
Но ровно этот же код и показывает пример того, насколько бесплодна затея,
если программист поставил себе твердую цель потушить полученную информацию методом недеяния, игнорирования результата.
(Зачем-то для чьих-то досужих глаз записывая некий мусор в лог.
Конечно, когда система полностью встанет от полной блокировки ресурсов - появится заинтересованный читатель полученных логов с приветами от программиста.
А вот у этого заинтересованного читателя ответить письменным образом "в лог программисту" может не оказаться возможности.)
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39191841
grok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
неожиданно сам тут нарыл

Best Practices for Exception Handling

http://www.onjava.com/pub/a/onjava/2003/11/19/exceptions.html

правда, оно весьма старое.
может устарело там чего.
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39191844
grok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grokнеожиданно сам тут нарыл

Best Practices for Exception Handling

http://www.onjava.com/pub/a/onjava/2003/11/19/exceptions.html

правда, оно весьма старое.
может устарело там чего.

в комментариях к статье обнаружился коммент

авторJust crap, read http://today.java.net/pub/a/today/2006/04/06/exception-handling-antipatterns.html instead


хм. надо будет и это почитать
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39192669
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПрошу каменты.
Код: sql
1.
if (error) return

Модно, стильно, молодёжно.

P.S. В це изначально есть не только еггог, но и setjump/longjump, которые представляют собой несколько усовершенствованный оператор перехода из ассемблера.
А вся "обработка ошибок" примера сводится к "чуть что - дать дуба". Так тоже можно, но приводить такой подход в качестве примера можно только на первых уроках.
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39192677
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тезис о высокой производительности я-бы предложил "раскрыть".

Действительно-ли наличие механизма try{...}catch является ударом
по перформансу или есть другие точки зрения?
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39192681
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если код исполняется не более пяти процентов времени, обсуждение производительности такого кода становится чистой схоластикой.

P.S. Схоласты, напомню, обсуждали количество чертей, которые могут поместиться на кончике иглы и прочие столь же полезные и, главно, актуальные вещи.
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39192688
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТезис о высокой производительности я-бы предложил "раскрыть".

Действительно-ли наличие механизма try{...}catch является ударом
по перформансу или есть другие точки зрения?
Ударом по производительности является разворачивание всего стэка для вычисления stacktrace, в связи с чем в JVM имеется оптимизация, которая после N вычислений stacktrace одного и того же вычисления перестаёт этой дурью заниматься.
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39192706
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov, количество ангелов вроде.

2 all

Можно предположить что механизм try-catch можно считать производительным когда у нас
есть соотношение к примеру 95% : 5% в чести успехов/неуспехов в блоке try

Обычно касается парсеров которые в цикле чёто преобразуют.
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39192799
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton..
Можно предположить что механизм try-catch можно считать производительным когда у нас
есть соотношение к примеру 95% : 5% в чести успехов/неуспехов в блоке try
...

ну, в пару кликов можно найти утверждения (касающиеся, возможно, устаревших версий java), что генерация/обработка исключений
может быть примерно в 200 раз дороже кода, полностью лишенного исключений.
т.е твое соотношение должно быть 99.95%:0.05%
на сайте Михаила Воронцова любопытный разбор методов кодирования/декодирования в/из Base64
Самыми медленными - от 3.5 до 50 раз в зависимости от размера кодируемого по отношению к ближайшим конкурентам оказываются
самые секретные sun.misc.BASE64Encoder и sun.misc.BASE64Decoder (ну, и самые древние).

По единственной причине - оба используют механизм исключений как элемент своей управляющей логики.
http://java-performance.info/base64-encoding-and-decoding-performance/


У него же есть обзор - на что в комбинации try - throw new CustomException("Horror!") - catch уходит время.
То, что try в любой системе с исключениями почти или полностью бесплатен - легко ожидать.
У catch самого по себе тоже нет оценки времени. Все время так или иначе уйдет на механику получения точки catch, переход на нее и передачу информации о самой отлавливаемой ошибке. Т.е. В любой системе время будет концентрироваться вокруг
throw new CustomException("Horror!")

На основании своих замеров Михаил утверждает, что сам по себе throw тоже практически несущественен.
Все время целиком уходит на new CustomException("Horror!").
При этом, если подавить механику формирования трейс-стека при конструировании объекта - ситуация улучшается в 10 раз,
а если отказаться от new (или даже вообще от extends Exception для формирования объекта, несущего информацию об ошибке),
то еще в 10 - 30 раз по отношению к предыдущему 10-кратному улучшению.
Т.е. в Java создание объекта исключения для переноса простой информации - чистопородное эстетство.
http://java-performance.info/throwing-an-exception-in-java-is-very-slow/
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39192808
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby, а Воронцов сравнивал sun.misc.* c восьмерчатыми java.util.Base64

( https://docs.oracle.com/javase/8/docs/api/java/util/Base64.html )

?

Были-ли ценные improovements воплощены в новых версиях?
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39192812
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

сравнивал - они у него и есть рекомендуемые для тех кто хочет стандартных решений, ну или на втором месте после
javax.xml.bind.DatatypeConverter - это для гиков и тех, у кого еще нет 8-ки.
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39193397
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если честно я всегда испытывал дискомфорт от отказа компиллятора собирать try{...}catch(){}
когда комментаришь какой-то пустяк и вдруг понимаешь что надо комментарить
всю секцию catch() а поскольку она - единственная - то надо убирать и try.

Здесь надеюсь сишники меня поймут. Все мы люди и не всегда пишем ПО с 0 до 100%.
Всегда есть какая-то фаза проб и ошибок. Элементарно даже юзкейс нового неизвестного
компонента может не иметь документации.

И вобщем-то когда я комментарю строку я логически предполагаю что мое действие
которое я УБРАЛ не должно вызывать side-effects. А оно вызывает ибо контракт
предполагает ОБЯЗАТЕЛЬНОЕ протокольное декларирование IO-эффекта.

Вот такая досада.
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39193454
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
      try {
            
        } catch (Exception e) {
        }finally{
        }



прошу так же освятить тему пропавшего Exception при использовании в конструкции finally

и так же вариант решения данной проблемы через Suppressed массив e.getSuppressed()
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39193528
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,
это комилится?
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39193534
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЕсли честно я всегда испытывал дискомфорт от отказа компиллятора собирать try{...}catch(){}

Судя по всему, ты говоришь о способностях компилятора производить преобразования структуры программы
не нарушая вычислительную эквивалентность результата.
В моей практике "не-ява" программирования мне, наоборот, приходится чаще печалиться от того, что свежую
версию компилятора кто-то шибко образованный с тщанием обучил паре новых "офигительных" фишек по оптимизации кода.
Что-то ни разу у меня не оказалось сомнений в вопросе о том - просил ли я об этом того умельца.
Даже если он считает, что код "бесполезный" и его можно "оптимизировать" методом полного выкидывания
- это не его дело (имхо). Я программист, и я решаю - на что жечь, а на что не жечь процессорные такты.
Я, рано или поздно, эти такты все равно сожгу.
Зачем ему надо, что бы я поминал его при этом "добрым словом"?

maytonкогда комментаришь какой-то пустяк и вдруг понимаешь что надо комментарить
всю секцию catch() а поскольку она - единственная - то надо убирать и try.

на первый взгляд - не вполне ясно - о чем печаль. Твоя рука - владыка.
Ты владелец внутренней структуры своей программы.

mayton....

И вобщем-то когда я комментарю строку я логически предполагаю что мое действие
которое я УБРАЛ не должно вызывать side-effects. А оно вызывает ибо контракт
предполагает ОБЯЗАТЕЛЬНОЕ протокольное декларирование IO-эффекта.

Вот такая досада.

Ну, исключение вызова, из которого приходит checked-exception само по себе не требует изменения контракта вызывающего
метода. Ты можешь (должен, если это имя зарезервировано для взаимодействия с внешним для компонента миром) продолжать сообщать миру о возможности выброса теперь уже невозможного исключения.

Печаль здесь возникает от того, что там где никому, кроме себя, не должен - во внутренностях компонента, исключение
исчезнувшего checked-exception из контракта метода вызывает нелокальные изменения в исходном коде потенциально обширного компонента.
Оно конечно, ООП без SOLID (написанное пером - не вырубишь топором) не жилец.
Но не до такой же степени, что аж полиморфизмом этого нельзя поправить.

А так да - это замечтательная идея - включить в контракт языка список проверяемых исключений метода.
Специально для того, чтобы первое же рожденное в этом языке правило большого пальца звучало так:
- Никода не создавай собственных checked exception
А второе эдак:
- Поймав чужое - никогда не выпускай его наружу в первородном виде.

То есть они есть , но ты в своих контактах никогда их не используй.
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39193543
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,

контактах = контрактах
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39193683
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonBasil A. Sidorov, количество ангелов вродеС кончиком иглы, да - ангелы. Но и про чертей была какая-то тема.Можно предположить что механизм try-catch можно считать производительным когда у нас
есть соотношение к примеру 95% : 5% в чести успехов/неуспехов в блоке tryДа нельзя этого предполагать.
Если исключение может возникнуть и должно быть обработано, то вопрос производительности механизма исключений нас не волнует. Напрочь не волнует.Обычно касается парсеров которые в цикле чёто преобразуют.Они вот так прямо каждую итерацию исключением завершают или, всё-таки, о проблемах сигнализируют?
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39193708
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovОни вот так прямо каждую итерацию исключением завершают или, всё-таки, о проблемах сигнализируют?
Ну... я часто встречал подобный паттерн:
Код: java
1.
2.
3.
4.
5.
6.
7.
        while(hasNext){
            try {
                Date dt = df.parse(field.toString());
            } catch (ParseException e) {
                fails++;
            }
        }


И мне интересна его стоимость с точки зрения реализации.
И мне также интересно другое. Если исключение (exception)
это с обще-человеческой точки зрения ситуация редкая.
То разработчик иногда создаёт ситуации когда это т.н.
исключение будет правилом. Тоесть будет почти 100%
срабатывать. Вопрос философии или филологии мы отложим
в сторону. А хотелось-бы сделать финт ушами чтобы гарантировать
ну... не очень сильную просадку перформанса. Возмоно
даже отказаться от SimpleDateFormat и заменить его чем-то
не таким ... эээ дорогим чтоли.
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39193736
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНу... я часто встречал подобный паттерн:
Код: java
1.
2.
3.
4.
5.
6.
7.
        while(hasNext){
            try {
                Date dt = df.parse(field.toString());
            } catch (ParseException e) {
                fails++;
            }
        }


И мне интересна его стоимость с точки зрения реализации... хотя это случай "может и должно".
Разработчик решил, что его парсер не будет падать по каждому чиху. Еще разработчик решил, что он не будет заниматься самостоятельной валидацией входных данных.
Совместно эти решения не оставляют выбора - штатный разбор данных может выкинуть исключения и, чтобы не упасть, мы обязаны перехватить это исключения.
Выбранная стратегия обработки - увеличить счётчик ошибок. Априори - ничем не хуже и не лучше других.И мне также интересно другое. Если исключение (exception) это с обще-человеческой точки зрения ситуация редкая.
То разработчик иногда создаёт ситуации когда это т.н. исключение будет правилом.Нет по обоим пунктам.
Генерация исключения - способ сообщить о проблеме так, чтобы это сообщение нельзя было игнорировать .
Но способ сообщения о событии вообще никак не связан с частотой событий - если возвращать код ошибки, то события будут происходить также часто. Ну или также редко.
Разработчик не делает исключение правилом: если появился try-блок, то это информация "всё в порядке, я знаю, что делать".
Если try-блок отсутствует (разработчик не знает что делать), то компилятор заставит вас или обработать все контролируемые исключение или сообщить, что ваш в вашем коде эти исключения могут возникнуть.
В общем - "принцип печёной картошки": не можешь удержать сам - перебрось другому
...
Рейтинг: 0 / 0
25 сообщений из 76, страница 2 из 4
Форумы / Java [игнор отключен] [закрыт для гостей] / подскажите что почитать про исключения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]