Your SlideShare is downloading. ×
0
Msu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling Exceptions
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Msu.Center.Lectures.J05 Handling Exceptions

424

Published on

Published in: Technology, News & Politics
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
424
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Исключения и отладка
  • 2. Устаревший подход: С <ul><li>Функция возвращает результат завершения операции (успех или код ошибки) </li></ul><ul><li>Изменённые данные передаются как in-out параметр </li></ul><ul><li>int do_stuff(data* d) { … } </li></ul><ul><li>… </li></ul><ul><li>err_code = do_stuff(&sample); </li></ul><ul><li>if (err_code == E_SUCCESS) { … } </li></ul><ul><li>Недостатки: </li></ul><ul><li>Подход приводит к избытку дополнительных проверок, ухудшает читаемость кода </li></ul>
  • 3. Исключения: С++ <ul><li>Преимущества: </li></ul><ul><li>Как и полагается, метод возвращает обработанные данные </li></ul><ul><li>В случае возникновения чрезвычайной ситуации система генерирует специальный объект-исключение, которое содержит информацию об ошибке </li></ul><ul><li>Подход добавляет гибкости при обработке исключений, оставляя код наглядным и прозрачным </li></ul><ul><li>Недостатки: </li></ul><ul><li>Исключением может оказаться переменная любого типа </li></ul>
  • 4. Исключения: Java <ul><li>Все исключения – объекты потомков класса Throwable </li></ul><ul><li>Исключения содержат полезную информацию об исключительных ситуациях </li></ul><ul><li>Полезные методы для обработки исключений (например, можно получить содержимое стека) </li></ul>
  • 5. Типы исключений <ul><li>Exception – исключения, которые стоит обрабатывать внутри программы </li></ul><ul><li>Error – серьёзные проблемы с работой программы, которые нельзя обработать (например, умершие треды) </li></ul><ul><li>RuntimeException – исключения, связанные с работой среды выполнения </li></ul><ul><li>Error и RuntimeException – так называемые Unchecked Exceptions </li></ul>
  • 6. Почти всегда стоит использовать Checked Exceptions по крайней мере, это соответствует оригинальной идеологии Java
  • 7. Throwing Exceptions <ul><li>Бросить исключение можно с помощью слова throw </li></ul><ul><li>Если метод бросает исключение и не ловит его, в сигнатуре должно содержаться описание исключения: </li></ul><ul><li>void pwnBase(String baseName) throws AlreadyPwnedException, BaseNotFoundException { </li></ul><ul><li>… </li></ul><ul><li>} </li></ul>
  • 8. Замечания <ul><li>Классы-потомки не могут добавлять новые исключения к методу, описанному в классе-родителе </li></ul><ul><li>В классе-потомке при перекрытии метода допускается опускать секцию throws </li></ul>
  • 9. Catching Exceptions <ul><li>Блок обработки исключения начинается ключевым словом catch </li></ul><ul><li>Несколько блоков catch могут располагаться последовательно </li></ul><ul><li>Обработка исключений полностью соответствует идеям полиморфизма </li></ul><ul><li>try { alien.pwnBase( “Earth-0xFFFE”); } </li></ul><ul><li>catch (AlreadyPwnedException ape) { … } </li></ul><ul><li>catch (Exception e) { … } </li></ul>
  • 10. Блок finally <ul><li>Блок finally выполняется почти всегда после завершения работы блока try ( и, возможно, после catch , если таковые есть) </li></ul><ul><li>Блок finally не выполняется, если при работе try / catch умер тред, в котором вывалилось исключение </li></ul>
  • 11. Best Practices for API Design <ul><li>Бросая исключение, подумайте: что сможет сделать пользователь в исключительной ситуации? </li></ul><ul><li>Сохраняйте наследование </li></ul><ul><li>Не создавайте новые классы-исключения, если в классе не будет храниться полезная информация об исключении </li></ul><ul><li>Уровень абстракции метода должен совпадать с уровнем абстракции исключения </li></ul><ul><li>Документируйте исключения и исключительные ситуации ( @throws , …) </li></ul>
  • 12. BestPractices for Using Exceptions <ul><li>Всегда закрывайте открытые ресурсы (в блоке finally ) </li></ul><ul><li>Никогда не используйте исключения для контроля за потоком выполнения </li></ul><ul><li>Не игнорируйте исключения </li></ul><ul><li>Не ловите исключения класса Exception </li></ul>
  • 13. Исключения и потоки Что происходит, когда исключение никто не ловит?
  • 14. Исключения и потоки <ul><li>С каждым тредом связан стек </li></ul><ul><li>Пропущенное исключение поднимается вверх по стеку </li></ul><ul><li>Если исключение поднимается до верхушки стека, то поток вызывает метод uncaughtException у группы умирающего потока </li></ul><ul><li>По умолчанию вызывается uncaughtException у родительской группы </li></ul><ul><li>Если родитель отсутствует, то вызывается метод Throwable.printStackTrace () , и тред благополучно погибает. </li></ul>
  • 15. Почти всегда стоит использовать Checked Exceptions?! Оказалось, что не всё так просто: даже идеологи Java (Брюс Эккель в их числе) рекомендуют использовать Unchecked Exceptions
  • 16. Unchecked Exceptions <ul><li>Варианты использования: </li></ul><ul><li>Не существует адекватного способа выхода из исключительной ситуации </li></ul><ul><li>Единственный возможный способ выйти из исключительной ситуации – прервать выполнение программы </li></ul><ul><li>Unchecked Exceptions используются в Python, C# и других языках. </li></ul>
  • 17. Отладка приложений <ul><li>Способы отладки: </li></ul><ul><li>Старые добрые System.out.println(); </li></ul><ul><li>API для отладки ( Runtime , …) </li></ul><ul><li>Специальные debug- сборки (с сохранением информации о номерах строк) </li></ul><ul><li>Использование средств отладки в IDE </li></ul><ul><li>Начиная с версии 1.6.0_10 , в JDK входит VisualVM, инструмент для отладки, диагностики и профилирования java- приложений </li></ul>

×