Msu.Center.Lectures.J05 Handling Exceptions
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Msu.Center.Lectures.J05 Handling Exceptions

on

  • 657 views

 

Statistics

Views

Total Views
657
Views on SlideShare
574
Embed Views
83

Actions

Likes
0
Downloads
2
Comments
0

2 Embeds 83

http://www.ncedu.ru 72
http://ncedu.ru 11

Accessibility

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Msu.Center.Lectures.J05 Handling Exceptions Presentation Transcript

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