06-Exceptions.Debug.pptx
- Количество слайдов: 14
Лекция 6. Exceptions. Отладка приложений. Лекции по Java SE Колесников Сергей, инженер-разработчик Net. Cracker © 2013 Net. Cracker Technology Corporation Confidential
План лекции • Java Exceptions ‒ ‒ ‒ ‒ Что это такое Механизм обработки ошибок Объявление исключений Классификация исключений Иерархия классов исключений Часто встречающиеся исключения Создание собственных классов исключений • Разбор примеров в IDE • Пример отладки приложения в Intellij IDEA © 2013 Net. Cracker Technology Corporation Confidential 2
1. Суть проблемы • Ошибки возникают в случаях: • • некорректного ввода данных сбоев оборудования нарушения ограничений среды выполнения программного кода • Цели обработки ошибок • Обеспечение стабильности работы программы • Безопасность в процессе выполнения • Дружественное поведение конечного программного продукта © 2013 Net. Cracker Technology Corporation Confidential 3
2. Подходы к обработке ошибок Возвращение методом кода ошибки Встроенный в язык механизм проверки и обработки int err. Num = first. Method(); if (err. Num == -1) { // обработка 1 -ой ошибки } else if(err. Num == -2) { // обработка 2 -ой ошибки } try { some. Business. Logic(); . . . another. Business. Logic() } catch(Exception 1 e 1) { // обработка 1 -ой ошибки }. . . catch(Exception. N e. N) { // обработка N-ой ошибки } finally { // выполнение завершающих // работу действий } © 2013 Net. Cracker Technology Corporation Confidential 4
3. Механизм обработки • Создается и «выбрасывается» объект исключения, содержащий информацию об ошибке • Выполнение текущего потока вычислений приостанавливается • Поиск обработчика исключений, возобновление потока выполнения public class Some. Class{ } public void some. Method() { try { //опасный код method 1(); method 2(); } catch (Array. Index. Out. Of. Bounds. Exception e 1) { … //обрабатываем ошибку } catch (IOException e 2) { … //обрабатываем ошибку } finally { … //этот блок выполнится в любом случае } } © 2013 Net. Cracker Technology Corporation Confidential 5
4. Объявление исключений • В чем проблема • Невозможно обработать ошибку в нашем коде • Не хотим брать на себя ответственность за ошибку • Нужно «обернуть» exception • Что делать: public class Some. Class { public void some. Method() throws IOException, Array. Index. Out. Of. Bounds. Exception { /* Код который может породить IOException или Array. Index. Out. Of. Bounds. Exception */ // еще какой-то код throw new IOException(); } } © 2013 Net. Cracker Technology Corporation Confidential 6
5. Классификация исключений Необъявляемые (непроверяемые, unchecked) Объявляемые (проверяемые, checked) • Носят предсказуемый характер • Обусловлены логикой кода • Указываются в объявлении метода • Могут не указываться в объявлении метода • Наследуют от класса Exception • Наследуют от классов Runtime. Exception, Error © 2013 Net. Cracker Technology Corporation Confidential 7
6. Базовые классы исключений Throwable Error . . . Exception Runtime. Exception . . . © 2013 Net. Cracker Technology Corporation Confidential 8
7. Часто встречающиеся исключения • Arithmetic. Exception • Array. Index. Out. Of. Bounds. Exception • String. Index. Out. Of. Bounds. Exception • Class. Not. Found. Exception • Null. Pointer. Exception • File. Not. Found. Exception • IOException • EOFException • Out. Of. Memory. Error © 2013 Net. Cracker Technology Corporation Confidential 9
8. Создание своих exception • Создается новый тип, наследующий от более широкого типа, подходящего по смыслу (например, java. io. File. Not. Found. Exception) • Само то, что выбрасывается исключение более узкого типа, несет в себе информацию • В состав нового типа могут вводиться новые поля и методы • Чаще всего класс содержит только 2 конструктора (по умолчанию и с параметром-строкой), просто вызывающие конструкторы родительского класса © 2013 Net. Cracker Technology Corporation Confidential 10
9. try-catch-finally features public class Finally. Test{ public static int string. Size(Object s) { try { return s. to. String(). length(); } catch (Exception ex) { return -1; } finally { return 0; } } public static void main(String[] args) { System. out. println(string. Size("string")); System. out. println(string. Size(null)); } } © 2013 Net. Cracker Technology Corporation Confidential 11
10. try-catch-finally features (продолжение) public void Foo() { try { System. out. println(“Start”); System. exit(0); } catch (Exception e) { System. out. println(“Exception”); } finally { System. out. println(“End”); } } public void Foo() { try { do. Smth(); } finally { cleanup(); //чистку хотим делать в любом случае } } © 2013 Net. Cracker Technology Corporation Confidential 12
11. Some tips • Exceptions не обладают свойством транзакционности! • Multiple catch block (Java 7 and higher!) catch (Number. Format. Exception | Illegal. Argument. Exception e) • Не используем пустые catch блоки! • Стараемся не возвращать из методов null, чтобы избежать Null. Pointer. Exception • Избегаем создания своих исключений © 2013 Net. Cracker Technology Corporation Confidential 13
Итоги • Обрабатываем исключения в блоке try/catch/finally • Либо добавляем исключение в сигнатуру метода • Checked and unchecked exceptions • Exceptions hierarchy © 2013 Net. Cracker Technology Corporation Confidential 14