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

More Related Content

What's hot

Использование Mock объектов в модульном тестировании
Использование Mock объектов в модульном тестированииИспользование Mock объектов в модульном тестировании
Использование Mock объектов в модульном тестированииGetDev.NET
 
Анастасия Бордонос - Проектирование тестов
Анастасия Бордонос - Проектирование тестовАнастасия Бордонос - Проектирование тестов
Анастасия Бордонос - Проектирование тестовYandex
 
Илья Фофанов "Обработка ошибок в C#"
Илья Фофанов "Обработка ошибок в C#"Илья Фофанов "Обработка ошибок в C#"
Илья Фофанов "Обработка ошибок в C#"Yulia Tsisyk
 
Геннадий Алпаев - "Оптимальное покрытие автотестами: генерация случайных данных"
Геннадий Алпаев - "Оптимальное покрытие автотестами: генерация случайных данных"Геннадий Алпаев - "Оптимальное покрытие автотестами: генерация случайных данных"
Геннадий Алпаев - "Оптимальное покрытие автотестами: генерация случайных данных"QA Dnepropetrovsk Community (Ukraine)
 
Don't worry, do automation
Don't worry, do automationDon't worry, do automation
Don't worry, do automationVitebsk Miniq
 
Автоматизированное тестирование не-тестировщиками
Автоматизированное тестирование не-тестировщикамиАвтоматизированное тестирование не-тестировщиками
Автоматизированное тестирование не-тестировщикамиSQALab
 
Static Analysis of Transactions Management in Applications for Java EE Platform
Static Analysis of Transactions Management in Applications for Java EE PlatformStatic Analysis of Transactions Management in Applications for Java EE Platform
Static Analysis of Transactions Management in Applications for Java EE PlatformIosif Itkin
 

What's hot (10)

Использование Mock объектов в модульном тестировании
Использование Mock объектов в модульном тестированииИспользование Mock объектов в модульном тестировании
Использование Mock объектов в модульном тестировании
 
Unit тесты java
Unit тесты javaUnit тесты java
Unit тесты java
 
Анастасия Бордонос - Проектирование тестов
Анастасия Бордонос - Проектирование тестовАнастасия Бордонос - Проектирование тестов
Анастасия Бордонос - Проектирование тестов
 
Илья Фофанов "Обработка ошибок в C#"
Илья Фофанов "Обработка ошибок в C#"Илья Фофанов "Обработка ошибок в C#"
Илья Фофанов "Обработка ошибок в C#"
 
Exceptions
ExceptionsExceptions
Exceptions
 
Геннадий Алпаев - "Оптимальное покрытие автотестами: генерация случайных данных"
Геннадий Алпаев - "Оптимальное покрытие автотестами: генерация случайных данных"Геннадий Алпаев - "Оптимальное покрытие автотестами: генерация случайных данных"
Геннадий Алпаев - "Оптимальное покрытие автотестами: генерация случайных данных"
 
Обработка ошибок
Обработка ошибокОбработка ошибок
Обработка ошибок
 
Don't worry, do automation
Don't worry, do automationDon't worry, do automation
Don't worry, do automation
 
Автоматизированное тестирование не-тестировщиками
Автоматизированное тестирование не-тестировщикамиАвтоматизированное тестирование не-тестировщиками
Автоматизированное тестирование не-тестировщиками
 
Static Analysis of Transactions Management in Applications for Java EE Platform
Static Analysis of Transactions Management in Applications for Java EE PlatformStatic Analysis of Transactions Management in Applications for Java EE Platform
Static Analysis of Transactions Management in Applications for Java EE Platform
 

Viewers also liked

Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.Anton Moiseenko
 
Java Core. Lecture#6. Part#1. Generics.
Java Core. Lecture#6. Part#1. Generics.Java Core. Lecture#6. Part#1. Generics.
Java Core. Lecture#6. Part#1. Generics.Anton Moiseenko
 
Async clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAsync clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAlex Tumanoff
 
Массивы в Java
Массивы в JavaМассивы в Java
Массивы в Javametaform
 
Maven как средство сборки проекта
Maven как средство сборки проектаMaven как средство сборки проекта
Maven как средство сборки проектаYova Stoika
 
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с MavenКурс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven7bits
 

Viewers also liked (7)

ABOUT PACKAGES
ABOUT PACKAGESABOUT PACKAGES
ABOUT PACKAGES
 
Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.Java Core. Lecture# 3. Part# 2. Exceptions.
Java Core. Lecture# 3. Part# 2. Exceptions.
 
Java Core. Lecture#6. Part#1. Generics.
Java Core. Lecture#6. Part#1. Generics.Java Core. Lecture#6. Part#1. Generics.
Java Core. Lecture#6. Part#1. Generics.
 
Async clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAsync clinic by by Sergey Teplyakov
Async clinic by by Sergey Teplyakov
 
Массивы в Java
Массивы в JavaМассивы в Java
Массивы в Java
 
Maven как средство сборки проекта
Maven как средство сборки проектаMaven как средство сборки проекта
Maven как средство сборки проекта
 
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с MavenКурс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
 

Similar to Java. Lecture 05. Handling Exceptions and Debugging

C++ Базовый. Занятие 09.
C++ Базовый. Занятие 09.C++ Базовый. Занятие 09.
C++ Базовый. Занятие 09.Igor Shkulipa
 
Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Dima Dzuba
 
JUnit, дай пять!
JUnit, дай пять!JUnit, дай пять!
JUnit, дай пять!Dmitrii Tuchs
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.Igor Shkulipa
 
Java Ahead-Of-Time compilation
Java Ahead-Of-Time compilationJava Ahead-Of-Time compilation
Java Ahead-Of-Time compilationNikita Lipsky
 
C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.Igor Shkulipa
 
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?Yandex
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Levon Avakyan
 
Cache2012 administrationbasics
Cache2012 administrationbasicsCache2012 administrationbasics
Cache2012 administrationbasicsDenis Pavlov
 
модуль 05 обработка исключений
модуль 05 обработка исключениймодуль 05 обработка исключений
модуль 05 обработка исключенийYevgeniy Gertsen
 
КРИ 2008. Проектирование игр: функциональный подход
КРИ 2008. Проектирование игр: функциональный подходКРИ 2008. Проектирование игр: функциональный подход
КРИ 2008. Проектирование игр: функциональный подходKirill Lebedev
 
Java весна 2013 лекция 9
Java весна 2013 лекция 9Java весна 2013 лекция 9
Java весна 2013 лекция 9Technopark
 
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья ШишковC++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишковcorehard_by
 
C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.Igor Shkulipa
 
C++ осень 2012 лекция 9
C++ осень 2012 лекция 9C++ осень 2012 лекция 9
C++ осень 2012 лекция 9Technopark
 
Лекция 7. Исключения и менеджеры контекста.
Лекция 7. Исключения и менеджеры контекста.Лекция 7. Исключения и менеджеры контекста.
Лекция 7. Исключения и менеджеры контекста.Roman Brovko
 
Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8. Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8. Dima Dzuba
 
Join the python_side
Join the python_sideJoin the python_side
Join the python_sidePaul Dmitryev
 

Similar to Java. Lecture 05. Handling Exceptions and Debugging (20)

C++ Базовый. Занятие 09.
C++ Базовый. Занятие 09.C++ Базовый. Занятие 09.
C++ Базовый. Занятие 09.
 
Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6
 
JUnit, дай пять!
JUnit, дай пять!JUnit, дай пять!
JUnit, дай пять!
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.
 
Java Ahead-Of-Time compilation
Java Ahead-Of-Time compilationJava Ahead-Of-Time compilation
Java Ahead-Of-Time compilation
 
C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.
 
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей.
 
Cache2012 administrationbasics
Cache2012 administrationbasicsCache2012 administrationbasics
Cache2012 administrationbasics
 
модуль 05 обработка исключений
модуль 05 обработка исключениймодуль 05 обработка исключений
модуль 05 обработка исключений
 
Step 3.2
Step 3.2Step 3.2
Step 3.2
 
Bytecode
BytecodeBytecode
Bytecode
 
КРИ 2008. Проектирование игр: функциональный подход
КРИ 2008. Проектирование игр: функциональный подходКРИ 2008. Проектирование игр: функциональный подход
КРИ 2008. Проектирование игр: функциональный подход
 
Java весна 2013 лекция 9
Java весна 2013 лекция 9Java весна 2013 лекция 9
Java весна 2013 лекция 9
 
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья ШишковC++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
 
C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.
 
C++ осень 2012 лекция 9
C++ осень 2012 лекция 9C++ осень 2012 лекция 9
C++ осень 2012 лекция 9
 
Лекция 7. Исключения и менеджеры контекста.
Лекция 7. Исключения и менеджеры контекста.Лекция 7. Исключения и менеджеры контекста.
Лекция 7. Исключения и менеджеры контекста.
 
Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8. Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8.
 
Join the python_side
Join the python_sideJoin the python_side
Join the python_side
 

More from colriot

Java. Lecture 12. Development Tools
Java. Lecture 12. Development ToolsJava. Lecture 12. Development Tools
Java. Lecture 12. Development Toolscolriot
 
Java. Lecture 10. Working with DBMS
Java. Lecture 10. Working with DBMSJava. Lecture 10. Working with DBMS
Java. Lecture 10. Working with DBMScolriot
 
Java. Lecture 09. Network Programming
Java. Lecture 09. Network ProgrammingJava. Lecture 09. Network Programming
Java. Lecture 09. Network Programmingcolriot
 
Java. Lecture 08. Multithreaded Programming
Java. Lecture 08. Multithreaded ProgrammingJava. Lecture 08. Multithreaded Programming
Java. Lecture 08. Multithreaded Programmingcolriot
 
Java. Lecture 01. Introducing Java
Java. Lecture 01. Introducing JavaJava. Lecture 01. Introducing Java
Java. Lecture 01. Introducing Javacolriot
 
Java. Lecture 07. Advanced XML
Java. Lecture 07. Advanced XMLJava. Lecture 07. Advanced XML
Java. Lecture 07. Advanced XMLcolriot
 
Java. Lecture 06.1. XML Basics
Java. Lecture 06.1. XML BasicsJava. Lecture 06.1. XML Basics
Java. Lecture 06.1. XML Basicscolriot
 
Java. Lecture 06. I/O
Java. Lecture 06. I/OJava. Lecture 06. I/O
Java. Lecture 06. I/Ocolriot
 
Java. Lecture 04. Standart Library
Java. Lecture 04. Standart LibraryJava. Lecture 04. Standart Library
Java. Lecture 04. Standart Librarycolriot
 
Java. Lecture 03. OOP and UML
Java. Lecture 03. OOP and UMLJava. Lecture 03. OOP and UML
Java. Lecture 03. OOP and UMLcolriot
 
Java. Lecture 02. Classes and Objects
Java. Lecture 02. Classes and ObjectsJava. Lecture 02. Classes and Objects
Java. Lecture 02. Classes and Objectscolriot
 

More from colriot (11)

Java. Lecture 12. Development Tools
Java. Lecture 12. Development ToolsJava. Lecture 12. Development Tools
Java. Lecture 12. Development Tools
 
Java. Lecture 10. Working with DBMS
Java. Lecture 10. Working with DBMSJava. Lecture 10. Working with DBMS
Java. Lecture 10. Working with DBMS
 
Java. Lecture 09. Network Programming
Java. Lecture 09. Network ProgrammingJava. Lecture 09. Network Programming
Java. Lecture 09. Network Programming
 
Java. Lecture 08. Multithreaded Programming
Java. Lecture 08. Multithreaded ProgrammingJava. Lecture 08. Multithreaded Programming
Java. Lecture 08. Multithreaded Programming
 
Java. Lecture 01. Introducing Java
Java. Lecture 01. Introducing JavaJava. Lecture 01. Introducing Java
Java. Lecture 01. Introducing Java
 
Java. Lecture 07. Advanced XML
Java. Lecture 07. Advanced XMLJava. Lecture 07. Advanced XML
Java. Lecture 07. Advanced XML
 
Java. Lecture 06.1. XML Basics
Java. Lecture 06.1. XML BasicsJava. Lecture 06.1. XML Basics
Java. Lecture 06.1. XML Basics
 
Java. Lecture 06. I/O
Java. Lecture 06. I/OJava. Lecture 06. I/O
Java. Lecture 06. I/O
 
Java. Lecture 04. Standart Library
Java. Lecture 04. Standart LibraryJava. Lecture 04. Standart Library
Java. Lecture 04. Standart Library
 
Java. Lecture 03. OOP and UML
Java. Lecture 03. OOP and UMLJava. Lecture 03. OOP and UML
Java. Lecture 03. OOP and UML
 
Java. Lecture 02. Classes and Objects
Java. Lecture 02. Classes and ObjectsJava. Lecture 02. Classes and Objects
Java. Lecture 02. Classes and Objects
 

Java. Lecture 05. Handling Exceptions and Debugging

  • 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-приложений