SlideShare a Scribd company logo
Язык программирования
JAVA
Лекция# 3 (Часть 2)
Обработка исключений в Java
Моисеенко Антон
canggu@mail.ru
СПГУАП
Кафедра Информационно-Сетевых Технологий
Содержание курса
■ Введение
■ Исключения и ошибки
■ Проверяемые и непроверяемые исключения
■ Блок try-catch-finally
■ Оператор throw
■ Зарезервированное слово throws
■ Некоторые типы исключений
Введение
class SimpleMistake {
public static void main(String args[]) {
System.out.println(1/0);
}
}
Что такое Исключение?
• Исключение в Java — это объект, который описывает
исключительное состояние, возникшее в каком-либо
участке программного кода
• Когда возникает исключительное состояние, создается
объект класса Exception
• Этот объект пересылается в
метод, обрабатывающий данный
тип исключительной ситуации
• По «следам» стека программы
можно найти данный метод – и
причину ошибки
Схема возникновения и
обработки исключений
Метод, в котором
возникла
ошибка
Метод, не обрабаты-
вающий
исключение
Метод, обрабаты-
вающий
исключение
mai
n
Метод, в котором
возникла
ошибка
Метод, не обрабаты-
вающий
исключение
Метод, обрабаты-
вающий
исключение
mai
n
Вызов
метод
а
Вызов
метод
а
Вызов
метод
а
Передает дальше
Обрабатывает
исключение
Что исключение поможет
найти?
■ Тип исключения указывает на причину его возникновения
■ Стек вызовов позволяет отследить путь, по которому был
достигнут проблемный код
■ Стандартный обработчик выдает номер строки кода, в
котором произошло исключение
■ В разработке можно использовать средства
○ отладка (debug)
○ точка остановка выполнения программы (breakpoint)
Возникновение исключения
Совершаем преднамеренную ошибку – делим на ноль
class SimpleMistake {
public static void main(String args[]) {
int d = 0;
int a = 42 / d;
}
}
Result:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at ru.guap.SimpleMistake.main(SimpleMistake.java:11)
Обработка исключения
Ловим свою ошибку и выводим информацию на консоль
class SimpleMistake{
public static void main(String args[]){
try{
int d = 0; //выполнится
int a = 42 / d;
int z = a + d; //не выполнится
}
catch (ArithmeticException e) {
System.out.println(«Деление на ноль");
}
}
}
Как действует связка try-catch
try{
doSomethingDangerous(); //опасный метод
}
catch (CatchedExceptionType e) {
treatDanger(); //обработка исключения
}
//CatchedExceptionType – класс, к которому
принадлежит исключение e
try { } catch (...)
{
}
Виды исключений
■ Проверяемое
○ FileNotFoundException, IOException, …
○ После такой ситуации зачастую требуется
восстановление состояния программы
○ Обязательны для описания при определении метода
■ Ошибка
○ Класс java.lang.Error и его наследники
■ Исключение времени исполнения
○ Оно же непроверяемое
○ RuntimeException и все наследники
○ Восстановление после таких ситуаций обычно не
производится
Примеры исключений
ArithmeticException Ошибка при вычислениях –
например, деление на 0.
ArrayIndexOutOfBoundsException Выход за пределы массива.
FileNotFoundException Если не обнаружен
запрошенный файл.
IOException Любое исключение в системе
ввода/вывода; включает
предыдущее.
OutOfMemoryError Реакция на нехватку памяти.
VirtualMachineError Ошибка внутри вируальной
машины Java.
AWTError Ошибка при работе
графического интерфейса.
Иерархия Throwable объектов
Exception
Throwable
IOException
Serializable
Error
Assertion
Error
OutOfMemory
Error
VirtualMachine
Error
Runtime
Exception
Arithmetic
Exception
SQLException
IndexOutOf
BoundsException
Требования к коду
• Если метод вызывает проверяемое
исключение, то он должен
> либо обработать его
> либо передать исключение выше по стеку
вызова
• Неудовлетворяющий
этому правилу код
не компилируется
Каскад обработчиков
Иногда одного обработчика недостаточно – создаем
несколько, на разные типы исключений
class MultiCatch {
public static void main(String args[]) {
try {
riskyMethod();
}
catch (ArithmeticException e) {
tryToHandleArithmetic();
}
catch(ArrayIndexOutOfBoundsException e) {
tryToHandleIndex();
}
}
}
Вложенные блоки (cont.)
Этот метод сам обрабатывает свое же исключение, поэтому
наружу исключение не передается
public static void doCalculation(){
try {
riskyCode();
} catch(ArrayIndexOutOfBoundsException e) {
tryToHandle();
}
}
Явно брошенное исключение
■ Новое исключение создается посредством вызова конструктора
■ Конструктор принимает строку, описывающую причину исключения
■ Генерирование исключения происходит с помощью оператора throw
class ThrowDemo {
void riskyMethod(int value) {
try {
//какие-то действия
if (value == 1){
//бросаем исключение
throw new IllegalArgumentException(“Can’t be 1");
}
}
catch (IllegalArgumentException e) {
prepareToClose();
//передача исключения выше
throw e;
}
}
Описание исключений
После имени метода указывается тип (типы) возможных исключений,
которые метод может сгенерировать: throws
class ThrowsDemo {
static void riskyMethod() throws
IllegalAccessException {
//do something
if (condition){
throw new
IllegalAccessException("fake");
}
}
public static void main(String args[]){
riskyMethod();
}
}
Блок finally
Используя данный блок, добиваемся того, что некий набор действий
выполнится независимо от того, сгенерировано исключение или нет
try {
//какие-то действия
doSomething();
//иногда бросает исключение
doSomethingRisky();
}catch (NumberFormatException e) {
handleState(); //обрабатываем исключение
} finally {
//действия, которые нужно выполнить независимо
// от того, были ли сгенерировано исключение или нет
doFinalStuff();
}
Пользовательские классы-исключения
Создаем свой класс исключений на основе класса Exception
class TooHeavyBirdException extends Exception {
private int weight;
private String message;
TooHeavyBirdException (int weight, String
message) {
this. weight = weight;
this. message = message;
}
}
Пользовательские классы-исключения
try {//какие-то действия
if (condition){//бросаем наше исключение
throw new TooHeavyBirdException (10, “Веревка не
выдержала птицу");
} //другие действия
}catch (TooHeavyBirdException e) {
showModalDialog(e.getMessage());
}
■ Используется обычным
способом.
■ Зачастую создавать свои
исключения не требуется.
Вредные советы
■ Закрыть все опасные участки пустыми обработчиками
(catch(...){ })
■ Использовать везде catch(Exception e){...} и throws
Exception
■ …
Вопросы?

More Related Content

PPTX
Java Core. Lecture# 3. Part# 3. Multithreading.
PPTX
Java Core. Lecture# 5. Concurrency.
PPTX
Java Core. Lecture# 3. Part# 1. Abstract classes.
PPTX
Java Core. Lecture# 2. Classes & objects.
PPTX
Java Core. Lecture# 1. Intro
PPTX
Java core-lect6-part3-annotation.ppt
PDF
C++ STL & Qt. Занятие 11.
PDF
C++ STL & Qt. Занятие 10.
Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 3. Part# 1. Abstract classes.
Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 1. Intro
Java core-lect6-part3-annotation.ppt
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 10.

What's hot (12)

PDF
C++ весна 2014 лекция 5
PDF
C++ STL & Qt. Занятие 08.
PDF
C++ STL & Qt. Занятие 04.
PDF
Java осень 2014 занятие 3
PDF
C++ STL & Qt. Занятие 05.
PDF
C++ STL & Qt. Занятие 03.
PDF
C++ осень 2013 лекция 4
PPTX
Java core-lect6-part2-reflection-api.ppt
PPT
Java. Многопоточность.
PPT
java
PDF
C++ STL & Qt. Занятие 07.
PDF
C++ STL & Qt. Занятие 09.
C++ весна 2014 лекция 5
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 04.
Java осень 2014 занятие 3
C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 03.
C++ осень 2013 лекция 4
Java core-lect6-part2-reflection-api.ppt
Java. Многопоточность.
java
C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 09.
Ad

Viewers also liked (8)

PDF
ABOUT PACKAGES
PPS
Exceptions
PPT
Java. Lecture 05. Handling Exceptions and Debugging
PPTX
Java Core. Lecture#6. Part#1. Generics.
PPTX
Async clinic by by Sergey Teplyakov
PPTX
Массивы в Java
PPT
Maven как средство сборки проекта
PPTX
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
ABOUT PACKAGES
Exceptions
Java. Lecture 05. Handling Exceptions and Debugging
Java Core. Lecture#6. Part#1. Generics.
Async clinic by by Sergey Teplyakov
Массивы в Java
Maven как средство сборки проекта
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Ad

Similar to Java Core. Lecture# 3. Part# 2. Exceptions. (20)

PPTX
обработка исключений в Java
PPT
4. java lecture exceptions
PDF
Объектно-ориентированное программирование. Лекция 5 и 6
PPT
Msu.Center.Lectures.J05 Handling Exceptions
PPT
05 Обработка Исключений
PPT
Исключения и ошибки
ODP
Исключительные ситуации
PPTX
Обработка исключений
PDF
C++ осень 2012 лекция 3
PPTX
Илья Фофанов "Обработка ошибок в C#"
PPT
Обработка ошибок
PDF
C++ Базовый. Занятие 09.
ODP
Обработка ошибок и исключений
PDF
2012 03 14_parallel_programming_lecture05
PDF
C++ осень 2012 лекция 9
PDF
ук 03.001.02 2011
PPT
модуль 05 обработка исключений
PDF
Лекция 7. Исключения и менеджеры контекста.
PDF
#2 "Распространённые ошибки в JavaScript" Денис Речкунов
PPT
WTF Code @ jug.lv
обработка исключений в Java
4. java lecture exceptions
Объектно-ориентированное программирование. Лекция 5 и 6
Msu.Center.Lectures.J05 Handling Exceptions
05 Обработка Исключений
Исключения и ошибки
Исключительные ситуации
Обработка исключений
C++ осень 2012 лекция 3
Илья Фофанов "Обработка ошибок в C#"
Обработка ошибок
C++ Базовый. Занятие 09.
Обработка ошибок и исключений
2012 03 14_parallel_programming_lecture05
C++ осень 2012 лекция 9
ук 03.001.02 2011
модуль 05 обработка исключений
Лекция 7. Исключения и менеджеры контекста.
#2 "Распространённые ошибки в JavaScript" Денис Речкунов
WTF Code @ jug.lv

Java Core. Lecture# 3. Part# 2. Exceptions.

  • 1. Язык программирования JAVA Лекция# 3 (Часть 2) Обработка исключений в Java Моисеенко Антон canggu@mail.ru СПГУАП Кафедра Информационно-Сетевых Технологий
  • 2. Содержание курса ■ Введение ■ Исключения и ошибки ■ Проверяемые и непроверяемые исключения ■ Блок try-catch-finally ■ Оператор throw ■ Зарезервированное слово throws ■ Некоторые типы исключений
  • 3. Введение class SimpleMistake { public static void main(String args[]) { System.out.println(1/0); } }
  • 4. Что такое Исключение? • Исключение в Java — это объект, который описывает исключительное состояние, возникшее в каком-либо участке программного кода • Когда возникает исключительное состояние, создается объект класса Exception • Этот объект пересылается в метод, обрабатывающий данный тип исключительной ситуации • По «следам» стека программы можно найти данный метод – и причину ошибки
  • 5. Схема возникновения и обработки исключений Метод, в котором возникла ошибка Метод, не обрабаты- вающий исключение Метод, обрабаты- вающий исключение mai n Метод, в котором возникла ошибка Метод, не обрабаты- вающий исключение Метод, обрабаты- вающий исключение mai n Вызов метод а Вызов метод а Вызов метод а Передает дальше Обрабатывает исключение
  • 6. Что исключение поможет найти? ■ Тип исключения указывает на причину его возникновения ■ Стек вызовов позволяет отследить путь, по которому был достигнут проблемный код ■ Стандартный обработчик выдает номер строки кода, в котором произошло исключение ■ В разработке можно использовать средства ○ отладка (debug) ○ точка остановка выполнения программы (breakpoint)
  • 7. Возникновение исключения Совершаем преднамеренную ошибку – делим на ноль class SimpleMistake { public static void main(String args[]) { int d = 0; int a = 42 / d; } } Result: Exception in thread "main" java.lang.ArithmeticException: / by zero at ru.guap.SimpleMistake.main(SimpleMistake.java:11)
  • 8. Обработка исключения Ловим свою ошибку и выводим информацию на консоль class SimpleMistake{ public static void main(String args[]){ try{ int d = 0; //выполнится int a = 42 / d; int z = a + d; //не выполнится } catch (ArithmeticException e) { System.out.println(«Деление на ноль"); } } }
  • 9. Как действует связка try-catch try{ doSomethingDangerous(); //опасный метод } catch (CatchedExceptionType e) { treatDanger(); //обработка исключения } //CatchedExceptionType – класс, к которому принадлежит исключение e try { } catch (...) { }
  • 10. Виды исключений ■ Проверяемое ○ FileNotFoundException, IOException, … ○ После такой ситуации зачастую требуется восстановление состояния программы ○ Обязательны для описания при определении метода ■ Ошибка ○ Класс java.lang.Error и его наследники ■ Исключение времени исполнения ○ Оно же непроверяемое ○ RuntimeException и все наследники ○ Восстановление после таких ситуаций обычно не производится
  • 11. Примеры исключений ArithmeticException Ошибка при вычислениях – например, деление на 0. ArrayIndexOutOfBoundsException Выход за пределы массива. FileNotFoundException Если не обнаружен запрошенный файл. IOException Любое исключение в системе ввода/вывода; включает предыдущее. OutOfMemoryError Реакция на нехватку памяти. VirtualMachineError Ошибка внутри вируальной машины Java. AWTError Ошибка при работе графического интерфейса.
  • 13. Требования к коду • Если метод вызывает проверяемое исключение, то он должен > либо обработать его > либо передать исключение выше по стеку вызова • Неудовлетворяющий этому правилу код не компилируется
  • 14. Каскад обработчиков Иногда одного обработчика недостаточно – создаем несколько, на разные типы исключений class MultiCatch { public static void main(String args[]) { try { riskyMethod(); } catch (ArithmeticException e) { tryToHandleArithmetic(); } catch(ArrayIndexOutOfBoundsException e) { tryToHandleIndex(); } } }
  • 15. Вложенные блоки (cont.) Этот метод сам обрабатывает свое же исключение, поэтому наружу исключение не передается public static void doCalculation(){ try { riskyCode(); } catch(ArrayIndexOutOfBoundsException e) { tryToHandle(); } }
  • 16. Явно брошенное исключение ■ Новое исключение создается посредством вызова конструктора ■ Конструктор принимает строку, описывающую причину исключения ■ Генерирование исключения происходит с помощью оператора throw class ThrowDemo { void riskyMethod(int value) { try { //какие-то действия if (value == 1){ //бросаем исключение throw new IllegalArgumentException(“Can’t be 1"); } } catch (IllegalArgumentException e) { prepareToClose(); //передача исключения выше throw e; } }
  • 17. Описание исключений После имени метода указывается тип (типы) возможных исключений, которые метод может сгенерировать: throws class ThrowsDemo { static void riskyMethod() throws IllegalAccessException { //do something if (condition){ throw new IllegalAccessException("fake"); } } public static void main(String args[]){ riskyMethod(); } }
  • 18. Блок finally Используя данный блок, добиваемся того, что некий набор действий выполнится независимо от того, сгенерировано исключение или нет try { //какие-то действия doSomething(); //иногда бросает исключение doSomethingRisky(); }catch (NumberFormatException e) { handleState(); //обрабатываем исключение } finally { //действия, которые нужно выполнить независимо // от того, были ли сгенерировано исключение или нет doFinalStuff(); }
  • 19. Пользовательские классы-исключения Создаем свой класс исключений на основе класса Exception class TooHeavyBirdException extends Exception { private int weight; private String message; TooHeavyBirdException (int weight, String message) { this. weight = weight; this. message = message; } }
  • 20. Пользовательские классы-исключения try {//какие-то действия if (condition){//бросаем наше исключение throw new TooHeavyBirdException (10, “Веревка не выдержала птицу"); } //другие действия }catch (TooHeavyBirdException e) { showModalDialog(e.getMessage()); } ■ Используется обычным способом. ■ Зачастую создавать свои исключения не требуется.
  • 21. Вредные советы ■ Закрыть все опасные участки пустыми обработчиками (catch(...){ }) ■ Использовать везде catch(Exception e){...} и throws Exception ■ …