|
|
|
подскажите что почитать про исключения
|
|||
|---|---|---|---|
|
#18+
boobyтакая формулировка тоже годится, даже если кто-то меня обманул... только все ваши горячие выпады - идут лесом. P.S. Царская Россия, юрфак, старый профессор (внутренне негодуя - не бабское это дело) экзаменует студентку. Студентка отлично отвечает и профессор решает задать шокирующий вопрос, чтобы, таки, поставить неуд. П. - Если бы я попытался вас изнасиловать, то как бы вы квалифицировали мои действия? С. - Как попытку с негодными средствами! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2016, 16:29 |
|
||
|
подскажите что почитать про исключения
|
|||
|---|---|---|---|
|
#18+
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, моё скромное мнение. не стоит оно того, ловить всё на этапе компиляции. пусть программа падает, лишь бы красиво и информативно. ведь есть такая штука как тесты. специальное место где падать. а то что не поймалось тестами, не думаю что словите и на компиляции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2016, 17:02 |
|
||
|
подскажите что почитать про исключения
|
|||
|---|---|---|---|
|
#18+
grok1) оборачивать почти все стандартные исключения в свои - допустимо ? 2) rethrow без оборачивания - нормальная практика ? 3) логирование в конструкторах исключений (своих) - нормально ? 4) нормально ли разделять обработку исключений ? т.е. обработали на одном уровне, rethrow, потом другая обработка на уровне вышеJava SE API в целом и исключения, в частности, не могут использоваться "в общем". Надо смотреть конкретную ситуацию и думать, что делать "прямвотздесь". Скажем, в сервлете: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. совершенно нормально: если возникла исключительная ситуация, то не надо гадать гадать на кофейной гуще можем ли мы продолжить работу - просим контейнер информировать клиента о случившейся неприятности и закругляемся. И это правильное решение, но для его принятия требуется некоторое знание предметной области и (что важно) - представление о реальной жизни. Нужно ли протоколировать эти ошибки? Чтение запроса - скорее нет, ошибку обработки запроса - скорее да. Печатать ли трассу стека? А для чего? Если строчки в логе недостаточно для идентификации места ошибки, то у вас ещё и протоколирование хреновое.5) и вопрос из области "как работает" как формируется stackTrace ? через fillInStackTrace ? я правильно понял ?Если никто не обработал исключение, что JVM сделает это без вашей помощи. Если исключения обрабатываются, то трасса стека - не лучший вариант. Таким образом, появление трассировки стека должно свидетельствовать об ошибке, а не быть частью штатной работы системы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2016, 18:31 |
|
||
|
подскажите что почитать про исключения
|
|||
|---|---|---|---|
|
#18+
maytonНо является ли плата за его обязательное декларирование и обработку ГАРАНТИЕЙ надёжности кода. Нет. Но мне это кажется удобным. Контролируемые исключения не должны кидаться "далеко"- их надо быстро обрабатывать, либо исправляя ошибку, либо превращая в неконтролируемые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2016, 07:56 |
|
||
|
подскажите что почитать про исключения
|
|||
|---|---|---|---|
|
#18+
В качестве небольшого отвлечения. Некоторые читатели топика 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. Особняком стоит функция gethostbyname() (). В данном коде она тоже решает вопросы сетевого уровня но не отрабатывает кода ошибок через perror () Если у вас есть другой исходник для реализации тривиального клиент-сервера на С/C++ то я заранее не возражаю. Я просто акцентирую внимание на том что данный способ или парадигма кодинга продолжает использоваться и в настоящее время. Прошу каменты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2016, 17:43 |
|
||
|
подскажите что почитать про исключения
|
|||
|---|---|---|---|
|
#18+
maytonили парадигма кодинга продолжает использоваться и в настоящее время. это только для узких случаев: - стека практически нет. Один уровень в main - БЛ нет и управлять исключительными ситуациями не надо. Весь код не делает ничего интересного кроме выплёвывания ошибок в выходной поток. - т.к. высокая производительность, то в жертву принесено всё остальное удобство от ООП до try и т.д. т.п. ЗЫ Прикладной код с поведением пишется совсем по другому. У данного кода только 2 состояния - ВКЛ\ВЫКЛ Такое вполне можно применять напр. при сериализации. Будет 2 состояния: Поучилось и НЕполучилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2016, 19:36 |
|
||
|
подскажите что почитать про исключения
|
|||
|---|---|---|---|
|
#18+
Petro123maytonили парадигма кодинга продолжает использоваться и в настоящее время. это только для узких случаев: - стека практически нет. Один уровень в main стек здесь возникает на каждом вызове библиотечной процедуры. Petro123- БЛ нет и управлять исключительными ситуациями не надо. Весь код не делает ничего интересного кроме выплёвывания ошибок в выходной поток. Бизнес логика здесь состоит в передаче текста переданного в качестве параметра сообщения на указанный во входном же параметре хост. Это код и делает. А "выплевывание" чего-то во входной поток - это побочный результат деятельности функции. В общем случае страшно порицаемый изобретателями методик "структурного" программирования. Petro123- т.к. высокая производительность, то в жертву принесено всё остальное удобство от ООП до try и т.д. т.п. как можно принести в жертву "удобство ООП" в языке, который про "ООП" ничего не знает? Это как Ликург в Спарте в 8м веке до нашей эры принес в жертву удобство использования криптовалюты в интернете, методом запрета денег, сделанных из золота. В жертву здесь принесена возможность использования представленной функции в сколько-нибудь развитых скриптах автоматизации. Путем возложения на саму функцию задачи "выплевывания" чего-то в выходной поток. Что при другом заходе должно было бы стать обязанностью того самого скрипта. Petro123ЗЫ Прикладной код с поведением пишется совсем по другому. У данного кода только 2 состояния - ВКЛ\ВЫКЛ Такое вполне можно применять напр. при сериализации. Будет 2 состояния: Поучилось и НЕполучилось. Вы ошибаетесь. В смысле выходного состояния у этой функции одно состояние. Всегда ВКЛ. Все получилось. Могло бы быть и два и больше - прямо по тексту вычитывается как минимум пять разумных состояний возврата, но автор кода решил обойтись одним. Принципиально в контексте обсуждения именно checked exceptions не вопрос о том - является ли здесь выдача единственного результата ошибкой программирования (имхо - является, но не это критично важно для безопасного программирования), а вопрос о том, не разрушается ли весь локальный мир всего того адресного пространства в котором запускается этот код при неудачном вызове. И ближайшим кандидатом на разрушение мира в этом коде является фрагмент Код: java 1. 2. 3. в котором не происходит попытки закрыть неудачно открытый сокет. Просмотра только этого фрагмента в общем случае недостаточно, чтобы дать ответ - идет здесь речь о прямой ошибке программирования или нет. Потребуется знание не только реализации функции socket, но и знание деталей устройства конкретной операционной системы, в рамках которого код может оказаться вполне безопасным в смысле блокировки/потери ресурса. Вероятно, рассматривание кода примерно такого сорта сорта и должно наводить на желание вписать прямо в контракт функции socket обязанность по обработке контролируемого исключения. Но ровно этот же код и показывает пример того, насколько бесплодна затея, если программист поставил себе твердую цель потушить полученную информацию методом недеяния, игнорирования результата. (Зачем-то для чьих-то досужих глаз записывая некий мусор в лог. Конечно, когда система полностью встанет от полной блокировки ресурсов - появится заинтересованный читатель полученных логов с приветами от программиста. А вот у этого заинтересованного читателя ответить письменным образом "в лог программисту" может не оказаться возможности.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2016, 02:09 |
|
||
|
подскажите что почитать про исключения
|
|||
|---|---|---|---|
|
#18+
неожиданно сам тут нарыл Best Practices for Exception Handling http://www.onjava.com/pub/a/onjava/2003/11/19/exceptions.html правда, оно весьма старое. может устарело там чего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2016, 23:50 |
|
||
|
подскажите что почитать про исключения
|
|||
|---|---|---|---|
|
#18+
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 хм. надо будет и это почитать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 00:01 |
|
||
|
подскажите что почитать про исключения
|
|||
|---|---|---|---|
|
#18+
maytonПрошу каменты. Код: sql 1. Модно, стильно, молодёжно. P.S. В це изначально есть не только еггог, но и setjump/longjump, которые представляют собой несколько усовершенствованный оператор перехода из ассемблера. А вся "обработка ошибок" примера сводится к "чуть что - дать дуба". Так тоже можно, но приводить такой подход в качестве примера можно только на первых уроках. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 19:23 |
|
||
|
подскажите что почитать про исключения
|
|||
|---|---|---|---|
|
#18+
Тезис о высокой производительности я-бы предложил "раскрыть". Действительно-ли наличие механизма try{...}catch является ударом по перформансу или есть другие точки зрения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 19:33 |
|
||
|
подскажите что почитать про исключения
|
|||
|---|---|---|---|
|
#18+
Если код исполняется не более пяти процентов времени, обсуждение производительности такого кода становится чистой схоластикой. P.S. Схоласты, напомню, обсуждали количество чертей, которые могут поместиться на кончике иглы и прочие столь же полезные и, главно, актуальные вещи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 19:37 |
|
||
|
подскажите что почитать про исключения
|
|||
|---|---|---|---|
|
#18+
maytonТезис о высокой производительности я-бы предложил "раскрыть". Действительно-ли наличие механизма try{...}catch является ударом по перформансу или есть другие точки зрения? Ударом по производительности является разворачивание всего стэка для вычисления stacktrace, в связи с чем в JVM имеется оптимизация, которая после N вычислений stacktrace одного и того же вычисления перестаёт этой дурью заниматься. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 19:43 |
|
||
|
подскажите что почитать про исключения
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, количество ангелов вроде. 2 all Можно предположить что механизм try-catch можно считать производительным когда у нас есть соотношение к примеру 95% : 5% в чести успехов/неуспехов в блоке try Обычно касается парсеров которые в цикле чёто преобразуют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 20:06 |
|
||
|
подскажите что почитать про исключения
|
|||
|---|---|---|---|
|
#18+
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/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 23:37 |
|
||
|
подскажите что почитать про исключения
|
|||
|---|---|---|---|
|
#18+
booby, а Воронцов сравнивал sun.misc.* c восьмерчатыми java.util.Base64 ( https://docs.oracle.com/javase/8/docs/api/java/util/Base64.html ) ? Были-ли ценные improovements воплощены в новых версиях? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 00:10 |
|
||
|
подскажите что почитать про исключения
|
|||
|---|---|---|---|
|
#18+
mayton, сравнивал - они у него и есть рекомендуемые для тех кто хочет стандартных решений, ну или на втором месте после javax.xml.bind.DatatypeConverter - это для гиков и тех, у кого еще нет 8-ки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 00:14 |
|
||
|
подскажите что почитать про исключения
|
|||
|---|---|---|---|
|
#18+
Если честно я всегда испытывал дискомфорт от отказа компиллятора собирать try{...}catch(){} когда комментаришь какой-то пустяк и вдруг понимаешь что надо комментарить всю секцию catch() а поскольку она - единственная - то надо убирать и try. Здесь надеюсь сишники меня поймут. Все мы люди и не всегда пишем ПО с 0 до 100%. Всегда есть какая-то фаза проб и ошибок. Элементарно даже юзкейс нового неизвестного компонента может не иметь документации. И вобщем-то когда я комментарю строку я логически предполагаю что мое действие которое я УБРАЛ не должно вызывать side-effects. А оно вызывает ибо контракт предполагает ОБЯЗАТЕЛЬНОЕ протокольное декларирование IO-эффекта. Вот такая досада. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 15:22 |
|
||
|
подскажите что почитать про исключения
|
|||
|---|---|---|---|
|
#18+
Код: java 1. 2. 3. 4. 5. прошу так же освятить тему пропавшего Exception при использовании в конструкции finally и так же вариант решения данной проблемы через Suppressed массив e.getSuppressed() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 16:00 |
|
||
|
подскажите что почитать про исключения
|
|||
|---|---|---|---|
|
#18+
Atum1, это комилится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 16:51 |
|
||
|
подскажите что почитать про исключения
|
|||
|---|---|---|---|
|
#18+
maytonЕсли честно я всегда испытывал дискомфорт от отказа компиллятора собирать try{...}catch(){} Судя по всему, ты говоришь о способностях компилятора производить преобразования структуры программы не нарушая вычислительную эквивалентность результата. В моей практике "не-ява" программирования мне, наоборот, приходится чаще печалиться от того, что свежую версию компилятора кто-то шибко образованный с тщанием обучил паре новых "офигительных" фишек по оптимизации кода. Что-то ни разу у меня не оказалось сомнений в вопросе о том - просил ли я об этом того умельца. Даже если он считает, что код "бесполезный" и его можно "оптимизировать" методом полного выкидывания - это не его дело (имхо). Я программист, и я решаю - на что жечь, а на что не жечь процессорные такты. Я, рано или поздно, эти такты все равно сожгу. Зачем ему надо, что бы я поминал его при этом "добрым словом"? maytonкогда комментаришь какой-то пустяк и вдруг понимаешь что надо комментарить всю секцию catch() а поскольку она - единственная - то надо убирать и try. на первый взгляд - не вполне ясно - о чем печаль. Твоя рука - владыка. Ты владелец внутренней структуры своей программы. mayton.... И вобщем-то когда я комментарю строку я логически предполагаю что мое действие которое я УБРАЛ не должно вызывать side-effects. А оно вызывает ибо контракт предполагает ОБЯЗАТЕЛЬНОЕ протокольное декларирование IO-эффекта. Вот такая досада. Ну, исключение вызова, из которого приходит checked-exception само по себе не требует изменения контракта вызывающего метода. Ты можешь (должен, если это имя зарезервировано для взаимодействия с внешним для компонента миром) продолжать сообщать миру о возможности выброса теперь уже невозможного исключения. Печаль здесь возникает от того, что там где никому, кроме себя, не должен - во внутренностях компонента, исключение исчезнувшего checked-exception из контракта метода вызывает нелокальные изменения в исходном коде потенциально обширного компонента. Оно конечно, ООП без SOLID (написанное пером - не вырубишь топором) не жилец. Но не до такой же степени, что аж полиморфизмом этого нельзя поправить. А так да - это замечтательная идея - включить в контракт языка список проверяемых исключений метода. Специально для того, чтобы первое же рожденное в этом языке правило большого пальца звучало так: - Никода не создавай собственных checked exception А второе эдак: - Поймав чужое - никогда не выпускай его наружу в первородном виде. То есть они есть , но ты в своих контактах никогда их не используй. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 16:56 |
|
||
|
подскажите что почитать про исключения
|
|||
|---|---|---|---|
|
#18+
booby, контактах = контрактах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 16:59 |
|
||
|
подскажите что почитать про исключения
|
|||
|---|---|---|---|
|
#18+
maytonBasil A. Sidorov, количество ангелов вродеС кончиком иглы, да - ангелы. Но и про чертей была какая-то тема.Можно предположить что механизм try-catch можно считать производительным когда у нас есть соотношение к примеру 95% : 5% в чести успехов/неуспехов в блоке tryДа нельзя этого предполагать. Если исключение может возникнуть и должно быть обработано, то вопрос производительности механизма исключений нас не волнует. Напрочь не волнует.Обычно касается парсеров которые в цикле чёто преобразуют.Они вот так прямо каждую итерацию исключением завершают или, всё-таки, о проблемах сигнализируют? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 18:16 |
|
||
|
подскажите что почитать про исключения
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovОни вот так прямо каждую итерацию исключением завершают или, всё-таки, о проблемах сигнализируют? Ну... я часто встречал подобный паттерн: Код: java 1. 2. 3. 4. 5. 6. 7. И мне интересна его стоимость с точки зрения реализации. И мне также интересно другое. Если исключение (exception) это с обще-человеческой точки зрения ситуация редкая. То разработчик иногда создаёт ситуации когда это т.н. исключение будет правилом. Тоесть будет почти 100% срабатывать. Вопрос философии или филологии мы отложим в сторону. А хотелось-бы сделать финт ушами чтобы гарантировать ну... не очень сильную просадку перформанса. Возмоно даже отказаться от SimpleDateFormat и заменить его чем-то не таким ... эээ дорогим чтоли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 18:34 |
|
||
|
подскажите что почитать про исключения
|
|||
|---|---|---|---|
|
#18+
maytonНу... я часто встречал подобный паттерн: Код: java 1. 2. 3. 4. 5. 6. 7. И мне интересна его стоимость с точки зрения реализации... хотя это случай "может и должно". Разработчик решил, что его парсер не будет падать по каждому чиху. Еще разработчик решил, что он не будет заниматься самостоятельной валидацией входных данных. Совместно эти решения не оставляют выбора - штатный разбор данных может выкинуть исключения и, чтобы не упасть, мы обязаны перехватить это исключения. Выбранная стратегия обработки - увеличить счётчик ошибок. Априори - ничем не хуже и не лучше других.И мне также интересно другое. Если исключение (exception) это с обще-человеческой точки зрения ситуация редкая. То разработчик иногда создаёт ситуации когда это т.н. исключение будет правилом.Нет по обоим пунктам. Генерация исключения - способ сообщить о проблеме так, чтобы это сообщение нельзя было игнорировать . Но способ сообщения о событии вообще никак не связан с частотой событий - если возвращать код ошибки, то события будут происходить также часто. Ну или также редко. Разработчик не делает исключение правилом: если появился try-блок, то это информация "всё в порядке, я знаю, что делать". Если try-блок отсутствует (разработчик не знает что делать), то компилятор заставит вас или обработать все контролируемые исключение или сообщить, что ваш в вашем коде эти исключения могут возникнуть. В общем - "принцип печёной картошки": не можешь удержать сам - перебрось другому ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 19:05 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39192677&tid=2124257]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
136ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 475ms |

| 0 / 0 |
