![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Royan |
|
|||
|
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: 3 Всего: 15 |
Вот такой, весьма простой с одной стороны вопрос, задал я себе недавно. Я над ним поразмышлял и придумал несколько аргументов как за так и против, пока я их говорить не стану, чтобы не сбивать вас с толку. Замечу лишь, что при ответе примете во внимание возможность сообщать об ошибках, например, через логгирование и визуальное оповещение. Так вот когда следует и когда не следует сообщать об ошибках выбрасывая исключение?
-------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
| w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Всегда, когда в данном методе невозможно обработать ошибку, при этом дальнейшее выполнение невозможно.
-------------------- ![]() ![]() |
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
Иногда удобно использовать исключения для прерывания некоторого процесса, но это не является хорошим стилем.
Поэтому соглашусь с w1nd. -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| y3u |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 9.9.2006 Где: Москва Репутация: 5 Всего: 13 |
ёмко... +1 -------------------- В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах |
|||
|
||||
| Den1s |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 27.10.2005 Репутация: нет Всего: нет |
думаю через логгирование лучше всегда потом по логам будет проще отследить работу программу, а вот визуальное оповещение только в тех случаях когда ошибка приводит к некорректной работе проги или как уже было сказано когда в данном методе невозможно обработать ошибку, при этом дальнейшее выполнение невозможно.:imho: Это сообщение отредактировал(а) Den1s - 24.8.2007, 08:34 |
|||
|
||||
| _Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 5 Всего: 34 |
Замечание основанное на чистой "психологии". Если прога будет использоваться юзерами, то она должна ругаться исключениями только в случае нештатных ситуаций. Типа такого:
Это сообщение отредактировал(а) _Y_ - 24.8.2007, 09:32 -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
| w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Если прога будет использоваться юзерами, то ВСЕ исключения должны обрабатываться, результатом чего и должны быть окошки с сообщениями об ошибке. -------------------- ![]() ![]() |
|||
|
||||
| le_chat |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 26.10.2006 Репутация: нет Всего: нет |
сам недавно задавался подобным вопросом. пришел к выводу что исключения есть сигнал программисту об ошибке в логике программы. пользователь конечно никаких исключений видеть не должен. только вот это не всегда удобный сигнал - в j2me к примеру при отладке на девайсе при бросании исключения поток скорее всего просто повиснет без всяких сообщений, а некоторые девайсы вообще скушают исключения и не подавятся. |
|||
|
||||
| _Y_ |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 5 Всего: 34 |
Это идеальный вариант. К сожалению, не помню названия книги, в которой доволно детально была описана проблема. Сколь помню идея такова:
-------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
||||
|
|||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: нет Всего: 37 |
У Макконела в "Совершенном коде" довольно неплохо тема раскрыта |
|||
|
||||
| Royan |
|
|||
|
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: 3 Всего: 15 |
Хорошо задаю наводящий вопрос в форме жизненной задачи.
Например, вы написали свой класс унаследованный от TabbedPaneUI, который в заисиовсти от текущего L&F работает по разному. Теперь перед вами стоит вопрос как поступить, если установленный пользователе L&F отличается от тех, что вы обрабатываете в своем TabbedPaneUI? Как бы поступили вы? При ответе примите во внимание, что в вашем проекте может быть множество классов, которые переписывают интерфесы разных GUI компонент. -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
| y3u |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 9.9.2006 Где: Москва Репутация: 5 Всего: 13 |
точка входа есть? Как только определили, что гуй не отрисуется по такому ЛАФ, то сообщаем об этом юзверю алертом, а сами подтыкиваем какой-нибудь дефолтный ЛАФ, чтобы гуй, таки, запустился... Это сообщение отредактировал(а) y3u - 24.8.2007, 15:44 -------------------- В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах |
|||
|
||||
| hydrant |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 10.8.2007 Репутация: нет Всего: нет |
А как насчёт Double.parseDouble(java.lang.String stringToParse)?
Я всегда использую такую конструкцию:
Я что-то в корне неправильное делаю или это типичный случай использования исключений, когда они не являются некими "страшными исключения", а просто средством для принятия дальнейшего решения? Добавлено через 14 минут и 21 секунду Упс, я извиняюсь. Кажется я не совсем правильно понял суть изначального вопроса. |
|||
|
||||
| w1nd |
|
||||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Все _ситуации_ предусмотреть невозможно. Всё возможные _исключения_ обработать не только можно, но и довольно легко, тем более в java. -------------------- ![]() ![]() |
||||
|
|||||
| y3u |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 9.9.2006 Где: Москва Репутация: 5 Всего: 13 |
надо место в коде использовать эргономично...
я так мыслю, если бы мы открывали какие-либо потоки, которые могут нам бросить какой-нить эксцебшон, то вполне уместно обернуть их try/catch и finally, в последнем мы все открытое должны прибить, апосля можно бросать какой-нибудь эксцебшон, желательно своего собственного типа, а как его там навихру у Карлсона будут или не будут отбрабатывать - не наша забота... кстати, есть один известный показательный пример использования эксцепшена. Вот, к примеру, приходят к нам реквестом гигантские многометровые XML файлеги, нам не надо их разбирать целиком, а надо выудить инфу, скажем, из первой четверти этоих XML-негов. Для этого мы, ессесно, будем использовать SAX. Но тут проблэма, как сказать саксу, что, типа, как бы, зачитали инфу, чего тратить ресурсы и тупо зачитывать файло дальше? Вот тут нам и приходит на помощь эксцепшин, который мы тупо кидаем в хендлере, когда зачитаем нужную инфу. -------------------- В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах |
|||
|
||||
| _Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 5 Всего: 34 |
1. Вроде бы тема использавать-не использовать исключения, а не обрабатывать-не обрабатывать 2. Обработать "все возможные" можно, но что Вы в результате получите? Одно и то же исключение может возникнуть в разных местах и по разным причинам. Поэтому Вы просто придете к ситуации когда наиболее частые (очевидные, важные, глупые - по вкусу) причины Вы обработаете по уму, а на остальные придется выкидывать то же сообщение "Программа выполнила недопустимую операцию и будет закрыта, компьютер уничтожен, а пользователь казнен". Все чем это сообщение будет отличаться от распечатываемого исключением на консоли - это красивым окошком и урезкой информации, которая, возможно, помогла бы решить проблему с помощью Вас, как "службы поддержки". Хотя. в каких-то случаях, это может и быть оправдано, но замена консольной распечатки бессодержательным окошком диалога ИМХО сути не меняет. y3u, я с Вами совершенно согласен. Сам сталкивался со случаями, когда обработка исключения вместо отслеживания причины помогает сэкономить уйму кода и производительности. -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
| Royan |
|
|||
|
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: 3 Всего: 15 |
Постулирую:
Конечный пользователь, пользующийся production app не должен знать ни о каких исключениях с этим вроде бы все согласны Среда обязана работать и выполнять свои функции до тех пор пока она их выполнять не сможет В случае ошибки внутри приложения она должна оставить какой-то след, чтобы потом разработчик смог разобрать откуда растут ногу у возникшей проблемы Проблема номер 1 Я не случайно привел пример с L&F. Дело в том, что если какая-то кнопка не может отрисоваться, используя какой-либо L&F она обязана отрисовываться хоть как то. Проблема номер 2 Взгляните на этот вопрос с точки зрения дизайнера или архитектора. 1) Почему какая то кнопка должна завязываться на какой-то Exception? 2) Если ответ на вопрос номер 1 положительный, то на какой именно Exception? 3) Что если вы не можете переписать сигнатуру метода для того чтобы он выбрасывал UnsupportedLookandFeelException или какой-либо другой? 4) Должен ли в таком случае класс "кнопки!!" узнать о каком-то логгере? Как бы вы ответили на эти вопросы? -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
| w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
1. Если неэк переписать сигнатуру, выбрасывается RuntimeException.
2. В java с версии 1.5 можно ловить необработанные исключения. На поток устанавливается обработчик. 3. ВСЕ классы могут/должны знать о логгере. 4. Рассчитывать на определённый LnF нельзя, пишите свой. Если не хотите его изменения, делайте свои компоненты, которые не будут использовать LnF. -------------------- ![]() ![]() |
|||
|
||||
| Maksym |
|
|||
![]() . ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1456 Регистрация: 19.8.2005 Где: Odessa, Black Sea Репутация: 14 Всего: 62 |
||||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
Maksym, имеется в виду Thread.setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
-------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| Maksym |
|
|||
![]() . ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1456 Регистрация: 19.8.2005 Где: Odessa, Black Sea Репутация: 14 Всего: 62 |
nornad
Ясно, спасибо. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |