![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
KOp4iK |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 26.11.2004 Где: Латвия Репутация: 1 Всего: 3 |
Добрый день!
Вот задался мыслью повышать свой expirience в программировании. Хочется узнавать новое... учиться, учиться и ещё раз учиться. В данный момент есть мысль что весь мехинизм Exception'ов я использую процентов на 10... а то и меньше... тобишь просто так, где не попадя, вставлять
не есть гут. И вообще что правильно сделать окружить try-catch'ем или добавить в описание метода Exception? Но вот как правильно что-то самому придумать неудаётся... да и есть мысль что "всё уже придумано до нас". Мож кто в крадце опишет как ПРАВИЛЬНО делать или даст ссылку на большую и умную статью ![]() |
|||
|
||||
w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 20 Всего: 54 |
Всё предельно просто: если в данном коде вы можете обработать исключение - обрабатываете, не можете обработать - выбрасываете на уровень выше. Разумеется,
Это сообщение отредактировал(а) w1nd - 18.1.2007, 13:17 -------------------- ![]() ![]() |
|||
|
||||
Vasay |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2097 Регистрация: 8.3.2006 Репутация: 11 Всего: 73 |
Я думаю, все зависит от эксепшена, и в каждом случае надо писать свой обработчик.
Например, получил ты такой эксепшен - java.net.SocketTimeoutException, можно попробовать обратится скажем еще 2 раза (или в конфиге прописать, сколько попыток обращения нужно делать), и получив тоже самое сказать: "данный ресурс не доступен в данное время" -------------------- Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны. |
|||
|
||||
val |
|
|||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев Репутация: нет Всего: 7 |
Если возникает экзепшин, то необходимо сразу же устранить его причины и убрать последствия, а если это невозможно, то про это надо сказать пользователю, немного перефразировав конечно, и закрыть программу...
![]() -------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
|||
|
||||
Vasay |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2097 Регистрация: 8.3.2006 Репутация: 11 Всего: 73 |
Зачем сразу закрывать? Например, обращаешься к файлу, который на сетевом диске, а сетевой диск уже не доступен, будешь программу закрывать, или предложишь пользователю выбрать другой диск? -------------------- Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны. |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Значит надо показать пользователю сообщение об ошибке, и предложить выбор долбиться дальше или прекратить попытки. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
chief39 |
|
|||
![]() карманная тигра ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1631 Регистрация: 20.5.2005 Где: Киев Репутация: 15 Всего: 77 |
У тебя подход чуть не такой. Эксепшн - это не цель, это средство. Вот что ты будешь делать, если пришёл в магазин, а он закрыт? Придумал? Пойдёшь в другой? Застрелишься от огорчения? Вернёшься домой и скажешь маме/жене/дочке - "хлеба нет. магазин закрыт" ? Придумал? А теперь опиши этот алгоритм, только закрытость магазина расценивай как что-то из ряда вон выходящее, исключение. Джава просто предоставляет возможность с этим работать легко. В методе покупкаХлеба() произошло исключение когда он вызывал метод открытьДверьМагазина(). Вот и решай сам что дальше делать. Мы ведь не знаем бизнес-логики твоих приложений. Можешь вызвать метод вернутьсяДомойНесолоноХлебавши() или сделать "retry". То есть вызвать метод покупкаХлеба() с другим магазином в качестве параметра. То есть используй это там, где необходимо. А твой вопрос звучит как "Купил вчера отвёртку. Крестообразная, с деревянной ручкой. Что бы такое открутить? Или лучше закрутить? Поделитесь опытом. Может есть что-то, что можно открутить. Подскажите адрес и как проехать. " ![]() -------------------- Люди - это свечи. Они либо горят, либо их - в жопу!(с) |
|||
|
||||
Tony |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1159 Регистрация: 3.3.2006 Где: Riga Репутация: нет Всего: 12 |
|
|||
|
||||
chief39 |
|
|||
![]() карманная тигра ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1631 Регистрация: 20.5.2005 Где: Киев Репутация: 15 Всего: 77 |
Почему? ![]() Это, скорее всего, в конкретном случае логически неверная обработка, но иногда именно стэктрэйс с продолжением работы и нужен. Хотя в большинстве случаев даже вывод стэктрейса лучше не выбрасывать на выход, а писать в лог каким-либо образом. Это сообщение отредактировал(а) chief39 - 18.1.2007, 17:45 -------------------- Люди - это свечи. Они либо горят, либо их - в жопу!(с) |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
Когда разрабатываешь, то часто нет представления, какие исключения могут быть и как их обрабатывать. Поэтому приходится ставить обычное e.printStackException(). Потом , когда более ясная картина будет, можно соптимизировать.
|
|||
|
||||
KOp4iK |
|
||||||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 26.11.2004 Где: Латвия Репутация: 1 Всего: 3 |
ДА ИМЕННО!!! "Всю жизнь шурупы молотком забиваю!!! Интуитивно догадываюсь, что есть такие отвёртки и даже есть у меня одна такая, но как крутить ума не приложу! Пробовал отвёрткой забивать шурупы, но как-то не получается ![]() В общем ясно что ничего не ястно ![]() Ладно, пример из головы (первый попавшийся). Есть строчка типа String( ![]()
В строчке эти данные через знак "точка с запятой (;)". Предполагаем что в имени человека нет знака "точка с запятой (;)" (хотя это мысль ... назвать ребёнка "%№:[!?};*)" ). Логично что в класе Human есть методы:
А мож их такими создать?
А может так?
ну и конечноже: Как должен выглядеть метод создания объекта Human? так?
Добавлено @ 19:59 Ах да и ещё в догонку на сколько важно/нужно свои Exception'ы создавать? И если да то в каких местах? |
||||||||||||
|
|||||||||||||
chief39 |
|
|||
![]() карманная тигра ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1631 Регистрация: 20.5.2005 Где: Киев Репутация: 15 Всего: 77 |
Ну смотри... вот парсишь ты.
И говоришь - "что делать с эксепшном?" А когда где и зачем ты парсишь? И что бы ты сделал, если бы сам, ручками, вместо компа, разбирал и что-то не сошлось? Вот пока ты сам не знаешь что ты хочешь делать если так не выйдет - тогда кто тебе посоветует что сделать? Если тебе на это пофик - можешь блоки catch пустыми оставить Если это юзер на форме неправильно ввёл что-то - можешь вывести надпись: "#$@#$@!!!! %$#%%$~!!!! %$^%$#%!!!! КОДА ВЫ НАКОНЕЦ-ТО ПРАВИЛЬНО ЗАПОЛНИТЕ ПОЛЯ???". Или: "в данном поле необходимо вводить число" Если тебе по сети прислали такой объект - тогда можешь остановить выполнение программы(дальнейшую обработку). Или сообщить, приостановить записать в лог ошибку, вывести надпись куда сможешь. Смотря что тебе требуется от программы. Вот что делал бы дворник дядя Коля если бы сломала метла? Не знаешь? А почему спрашиваешь что должна делать программа? То же, что и дядя Коля! Вот если ты расскажешь что дядя Коля должен пожаловаться начальнику или деньги заплатить - тогда - прекрасно - можно в программе реализовать отправку сообщения и перечисление денег. Понимаешь к чему я веду? ![]() К тому, что ты сам опиши клиентскую логику работы программы, чотб она понимала что от неё требуется ![]() Вот TCP пакет потерял - заново будет пересылать пока всё ок не станет. UDP потерял? - пофиг! Вот как тут можно сказать кто из них правильно работает? Что требуют то и делают ![]() Вот в твоём случе я бросал бы собственный InvalidDataException, а правильно или нет - хрен его знает - я не в курсе требований к твоей системе(а с них любая работа начинается). А не "копайте тут и тут, а я пока узнаю где надо" Вообще, эксепшн - это порсто сообщение. что что-то не так. Его можно создать и выбросить(то есть сообщить "у меня тут лажа"). Тот кто тебя послал делать то, что вызвало эксепшн, то есть вызвавший тебя метод должен
Тип исключения - это тип факта, тип происшествия. Свои - нужны. В нужных случаях. Когда происходит какая-то проблема, которая бывает только в твоей системе или которую можно выделить среди других, и реагировать на неё именно так, как нужно в случае этой проблемы. То есть тип эксепшна - это диагноз. См. пример с водилой. Свои эксепшны: КарбюраторЗасорился и МашинаСломалась Ты давай опиши простенькую задачу с конкретными требованиями к программе. И на её примере разберём. Нашлёпаем ксепшнов и что с ними делать. Например програмуллина типа сервера аськи и аськины клиенты. Это сообщение отредактировал(а) chief39 - 18.1.2007, 22:19 -------------------- Люди - это свечи. Они либо горят, либо их - в жопу!(с) |
|||
|
||||
RebornCrusader |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 18.1.2007 Где: Владивосток Репутация: 2 Всего: 6 |
Где-то прочитал хорошую фразу: ловите эксепшены как можно раньше (на более низком уровне); решайте, как поступить - на как можно более высоком уровне.
А чисто на пальцах: на одни проблемы подчинённых начальнику начихать, от других - у начальника возникают свои собственные. И следует помнить, что выброс исключения (не отлов, а именно ситуация возникновения) кушает относительно много ресурсов. Что касается конкретьной реализщации, я бы сказал, это от собственного стиля зависит. Вообще, всё это описано в любой толковой книжке в соответствующей главе. --------------------
"Fais se que dois, - adviegne que peut. C'est commande au chevalier" |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |