Исключения и отладка
Устаревший подход: С <ul><li>Функция возвращает результат завершения операции (успех или код ошибки) </li></ul><ul><li>Изм...
Исключения: С++ <ul><li>Преимущества: </li></ul><ul><li>Как и полагается, метод возвращает обработанные данные </li></ul><...
Исключения:  Java <ul><li>Все исключения  –  объекты потомков класса  Throwable </li></ul><ul><li>Исключения содержат поле...
Типы исключений <ul><li>Exception  –  исключения, которые стоит обрабатывать внутри программы </li></ul><ul><li>Error  – с...
Почти всегда стоит использовать  Checked Exceptions по крайней мере, это соответствует оригинальной идеологии  Java
Throwing Exceptions <ul><li>Бросить исключение можно с помощью   слова  throw </li></ul><ul><li>Если метод бросает исключе...
Замечания <ul><li>Классы-потомки не могут добавлять новые исключения к методу, описанному в классе-родителе </li></ul><ul>...
Catching Exceptions <ul><li>Блок обработки исключения начинается ключевым словом  catch </li></ul><ul><li>Несколько блоков...
Блок  finally <ul><li>Блок  finally  выполняется  почти  всегда после завершения работы блока  try  ( и, возможно, после  ...
Best Practices   for API Design <ul><li>Бросая исключение, подумайте: что сможет сделать пользователь в исключительной сит...
BestPractices for Using Exceptions <ul><li>Всегда  закрывайте открытые ресурсы (в блоке  finally ) </li></ul><ul><li>Никог...
Исключения и потоки Что происходит, когда исключение никто не ловит?
Исключения и потоки <ul><li>С каждым тредом связан стек </li></ul><ul><li>Пропущенное исключение поднимается вверх по стек...
Почти всегда стоит использовать  Checked Exceptions?! Оказалось, что не всё так просто: даже идеологи  Java  (Брюс Эккель ...
Unchecked Exceptions <ul><li>Варианты использования: </li></ul><ul><li>Не существует адекватного способа выхода из исключи...
Отладка приложений <ul><li>Способы отладки: </li></ul><ul><li>Старые добрые  System.out.println(); </li></ul><ul><li>API  ...
Upcoming SlideShare
Loading in …5
×

Msu.Center.Lectures.J05 Handling Exceptions

558 views

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
558
On SlideShare
0
From Embeds
0
Number of Embeds
84
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Msu.Center.Lectures.J05 Handling Exceptions

  1. 1. Исключения и отладка
  2. 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. 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. 4. Исключения: Java <ul><li>Все исключения – объекты потомков класса Throwable </li></ul><ul><li>Исключения содержат полезную информацию об исключительных ситуациях </li></ul><ul><li>Полезные методы для обработки исключений (например, можно получить содержимое стека) </li></ul>
  5. 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. 6. Почти всегда стоит использовать Checked Exceptions по крайней мере, это соответствует оригинальной идеологии Java
  7. 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. 8. Замечания <ul><li>Классы-потомки не могут добавлять новые исключения к методу, описанному в классе-родителе </li></ul><ul><li>В классе-потомке при перекрытии метода допускается опускать секцию throws </li></ul>
  9. 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. 10. Блок finally <ul><li>Блок finally выполняется почти всегда после завершения работы блока try ( и, возможно, после catch , если таковые есть) </li></ul><ul><li>Блок finally не выполняется, если при работе try / catch умер тред, в котором вывалилось исключение </li></ul>
  11. 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. 12. BestPractices for Using Exceptions <ul><li>Всегда закрывайте открытые ресурсы (в блоке finally ) </li></ul><ul><li>Никогда не используйте исключения для контроля за потоком выполнения </li></ul><ul><li>Не игнорируйте исключения </li></ul><ul><li>Не ловите исключения класса Exception </li></ul>
  13. 13. Исключения и потоки Что происходит, когда исключение никто не ловит?
  14. 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. 15. Почти всегда стоит использовать Checked Exceptions?! Оказалось, что не всё так просто: даже идеологи Java (Брюс Эккель в их числе) рекомендуют использовать Unchecked Exceptions
  16. 16. Unchecked Exceptions <ul><li>Варианты использования: </li></ul><ul><li>Не существует адекватного способа выхода из исключительной ситуации </li></ul><ul><li>Единственный возможный способ выйти из исключительной ситуации – прервать выполнение программы </li></ul><ul><li>Unchecked Exceptions используются в Python, C# и других языках. </li></ul>
  17. 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>

×