Java. Lecture 05. Handling Exceptions and Debugging

1,140 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
1,140
On SlideShare
0
From Embeds
0
Number of Embeds
111
Actions
Shares
0
Downloads
23
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Java. Lecture 05. Handling Exceptions and Debugging

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

×