SlideShare a Scribd company logo
1 of 16
Обработка исключений
Типы ошибок

Ошибки компиляции

Времени выполнения
(run-time errors,
exceptions,
исключения)

Логические ошибки

if (flag == 1) n=0;
else n=1;
val=1/n;

1
Обработка исключений
Исключение в Java — это объект
некоторого класса, который описывает
исключительное состояние, возникшее в
каком-либо участке программного кода.
При возникновении исключения
исполняющая система Java создает
объект класса, связанного с
данным исключением. Этот объект
хранит информацию о возникшей
исключительной ситуации (точка
возникновения, описание и т.п.)
Возможна как автоматическая так и
программная генерация исключений.
2
Обработка исключений
Формат try-catch блока
try
{ // блок кода }
catch (ExceptionType1 еxOb1)
{ // обработчик исключений типа
ExceptionType1 }
[catch (ExceptionType2 еxOb2)
{ // обработчик исключений типа
ExceptionType2 }]
[finally
{ //код, который выполняется перед
выходом из блока try }]
3
Обработка исключений
Формат try-catch блока
try
{ read_from_file ("data.txt");
calculate();
}
catch ( FileNotFoundException fe )
{ System.out.println("Файл data.txt не найден");
}
catch ( ArithmeticException aex )
{ System.out.println("Деление на ноль");
}
4
Обработка исключений
Формат try-catch блока
• управление никогда не возвращается из блока catch
обратно в блок try, после выполнения catch-блока
управление передается строке, следующей сразу
после try-catch-блока;
• область видимости catch-блока ограничена
ближайшим предшествующим утверждением try, т.е.
catch-блок не может захватывать исключение,
выброшенное «не своим» try-блоком;
• операторы, контролируемые утверждением try,
должны быть окружены фигурными скобками даже
если это одиночная инструкция.
• блоки try могут быть вложенными
5
Обработка исключений
Стек вызовов

Если обработчик не найден исключение передается JVM.
6
Обработка исключений
Дефолтный обработчик исключений

7
Обработка исключений
Классы исключений

никогда не
обрабатываются,
т.к. не имеет смысла
обязательно
обрабатывать, иначе
код не скомпилируется
надо обрабатывать, но
компилятор это не проверяет
8
Обработка исключений
Классы исключений
Catch-блоки просматриваются в порядке
их появления в программе, при этом
обработчик catch для суперкласса
перехватывает исключения как для своего
класса так и для всех его подклассов.
Следовательно, в последовательности
catch-блоков подклассы исключений
должны следовать перед любым из
суперклассов.

9
Обработка исключений
Классы исключений
try
{inputFile("data.txt");
calculate(); }
catch ( IOException ExObj2)
FileNotFoundException ExObj1)
{System.out.println("Файл data.txt не найден");
{System.out.println("Ошибка ввода-вывода"); } }
Error:

catch ( FileNotFoundException ExObj1)
IOException ExObj2)

{System.out.println("Ошибка ввода-вывода");
unreachable code! {System.out.println("Файл data.txt не найден");} }
т.к. FileNotFoundException – подкласс IOException

10
Обработка исключений
Оператор throw
Программная генерация исключения:
throw new <ExceptionClassName>();
throw new <ExceptionClassName>(“…”);

11
Обработка исключений
Оператор throw
public void demoproc ()
{try
{throw new NullPointerException("demo"); }
catch (NullPointerException e)
{System.out.println("caught inside demoproc"); throw e; }
}
public static void main(String args[])
{try
{demoproc(); }
catch(NullPointerException e)
{System.out.println("recaught: " + e); }
}

12
Обработка исключений
Оператор throw

Вывод программы:

13
Обработка исключений
Оператор throws
Исключения, которые порождены от Exception, но не
от RuntimeException, могут быть сгенерированы
только явно операцией throw. При этом если метод
может выбрасывать одно из таких исключений, то
должно выполняться одно из двух условий: либо для
такого исключения должен быть catch-обработчик,
либо в заголовке такого метода должна стоять
конструкция:
throws <ExceptionClassName>
(т.н. Catch or Specify Requirement)
public String readLine() throws IOException
14
Обработка исключений
Оператор throws
Вызов метода, в описании которого стоит
" throws ... ", тоже должен находиться
либо
внутри try-catch-блока, либо внутри
метода с конструкцией " throws ... " в его
заголовке и т.д. вплоть до метода main().
Таким образом, где-то в программе любое
возможное исключение, попадающее в
категорию Catch or Specify Requirement
обязано быть перехвачено и обработано.

15
Обработка исключений
Подклассы Exception
class MyException extends Exception
{private int detail;
MyException(int a)
{detail = a; }
public String toString()
{return "MyException[" + detail + "]"; }
}
Если надо создать исключение необязательное к перехвату –
его надо унаследовать от RuntimeException.
16

More Related Content

What's hot

Тестируем тесты с PIT (мутационное тестирование)
Тестируем тесты с PIT (мутационное тестирование)Тестируем тесты с PIT (мутационное тестирование)
Тестируем тесты с PIT (мутационное тестирование)Vitebsk Miniq
 
Lecture5
Lecture5Lecture5
Lecture5orgil
 
Обработка ошибок и исключений
Обработка ошибок и исключенийОбработка ошибок и исключений
Обработка ошибок и исключенийitclub_kz
 
Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Dima Dzuba
 
Dmitrii Dolzhenko «С++ Problems and How Test Frameworks Actually Work»
Dmitrii Dolzhenko «С++ Problems and How Test Frameworks Actually Work» Dmitrii Dolzhenko «С++ Problems and How Test Frameworks Actually Work»
Dmitrii Dolzhenko «С++ Problems and How Test Frameworks Actually Work» LogeekNightUkraine
 
Обработка исключений
Обработка исключенийОбработка исключений
Обработка исключенийZhaslan Doschanov
 
Филипп Ковалев — Путь в npm
Филипп Ковалев — Путь в npmФилипп Ковалев — Путь в npm
Филипп Ковалев — Путь в npmYandex
 
2012 03 14_parallel_programming_lecture05
2012 03 14_parallel_programming_lecture052012 03 14_parallel_programming_lecture05
2012 03 14_parallel_programming_lecture05Computer Science Club
 
Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.Anton Moiseenko
 
Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3Technopark
 
Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.Dima Dzuba
 
Стажировка-2013, разработчики, занятие 5. Исключительные ситуации, журналиров...
Стажировка-2013, разработчики, занятие 5. Исключительные ситуации, журналиров...Стажировка-2013, разработчики, занятие 5. Исключительные ситуации, журналиров...
Стажировка-2013, разработчики, занятие 5. Исключительные ситуации, журналиров...7bits
 
Akka и реактивное программирование на JVM
Akka и реактивное программирование на JVMAkka и реактивное программирование на JVM
Akka и реактивное программирование на JVMOpen-IT
 
Сергей Париев - "обработка дедлоков в MySql"
Сергей Париев - "обработка дедлоков в MySql"Сергей Париев - "обработка дедлоков в MySql"
Сергей Париев - "обработка дедлоков в MySql"railsclub
 
C++ Базовый. Занятие 13.
C++ Базовый. Занятие 13.C++ Базовый. Занятие 13.
C++ Базовый. Занятие 13.Igor Shkulipa
 
ПВТ - весна 2015 - Лекция 0. Описание курса
ПВТ - весна 2015 - Лекция 0. Описание курсаПВТ - весна 2015 - Лекция 0. Описание курса
ПВТ - весна 2015 - Лекция 0. Описание курсаAlexey Paznikov
 

What's hot (16)

Тестируем тесты с PIT (мутационное тестирование)
Тестируем тесты с PIT (мутационное тестирование)Тестируем тесты с PIT (мутационное тестирование)
Тестируем тесты с PIT (мутационное тестирование)
 
Lecture5
Lecture5Lecture5
Lecture5
 
Обработка ошибок и исключений
Обработка ошибок и исключенийОбработка ошибок и исключений
Обработка ошибок и исключений
 
Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6
 
Dmitrii Dolzhenko «С++ Problems and How Test Frameworks Actually Work»
Dmitrii Dolzhenko «С++ Problems and How Test Frameworks Actually Work» Dmitrii Dolzhenko «С++ Problems and How Test Frameworks Actually Work»
Dmitrii Dolzhenko «С++ Problems and How Test Frameworks Actually Work»
 
Обработка исключений
Обработка исключенийОбработка исключений
Обработка исключений
 
Филипп Ковалев — Путь в npm
Филипп Ковалев — Путь в npmФилипп Ковалев — Путь в npm
Филипп Ковалев — Путь в npm
 
2012 03 14_parallel_programming_lecture05
2012 03 14_parallel_programming_lecture052012 03 14_parallel_programming_lecture05
2012 03 14_parallel_programming_lecture05
 
Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.
 
Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3
 
Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.
 
Стажировка-2013, разработчики, занятие 5. Исключительные ситуации, журналиров...
Стажировка-2013, разработчики, занятие 5. Исключительные ситуации, журналиров...Стажировка-2013, разработчики, занятие 5. Исключительные ситуации, журналиров...
Стажировка-2013, разработчики, занятие 5. Исключительные ситуации, журналиров...
 
Akka и реактивное программирование на JVM
Akka и реактивное программирование на JVMAkka и реактивное программирование на JVM
Akka и реактивное программирование на JVM
 
Сергей Париев - "обработка дедлоков в MySql"
Сергей Париев - "обработка дедлоков в MySql"Сергей Париев - "обработка дедлоков в MySql"
Сергей Париев - "обработка дедлоков в MySql"
 
C++ Базовый. Занятие 13.
C++ Базовый. Занятие 13.C++ Базовый. Занятие 13.
C++ Базовый. Занятие 13.
 
ПВТ - весна 2015 - Лекция 0. Описание курса
ПВТ - весна 2015 - Лекция 0. Описание курсаПВТ - весна 2015 - Лекция 0. Описание курса
ПВТ - весна 2015 - Лекция 0. Описание курса
 

Similar to 4. java lecture exceptions

модуль 05 обработка исключений
модуль 05 обработка исключениймодуль 05 обработка исключений
модуль 05 обработка исключенийYevgeniy Gertsen
 
Илья Фофанов "Обработка ошибок в C#"
Илья Фофанов "Обработка ошибок в C#"Илья Фофанов "Обработка ошибок в C#"
Илья Фофанов "Обработка ошибок в C#"Yulia Tsisyk
 
Исключения и ошибки
Исключения и ошибкиИсключения и ошибки
Исключения и ошибкиUnguryan Vitaliy
 
Лекция 7. Исключения и менеджеры контекста.
Лекция 7. Исключения и менеджеры контекста.Лекция 7. Исключения и менеджеры контекста.
Лекция 7. Исключения и менеджеры контекста.Roman Brovko
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаSQALab
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.Igor Shkulipa
 
javascript
javascriptjavascript
javascriptsovest
 
javascript_part1
javascript_part1javascript_part1
javascript_part1sovest
 
#2 "Распространённые ошибки в JavaScript" Денис Речкунов
#2 "Распространённые ошибки в JavaScript" Денис Речкунов#2 "Распространённые ошибки в JavaScript" Денис Речкунов
#2 "Распространённые ошибки в JavaScript" Денис РечкуновJSib
 
C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.Igor Shkulipa
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey TeplyakovAlex Tumanoff
 
03_JavaBasicConstructionsAndDatatypes
03_JavaBasicConstructionsAndDatatypes03_JavaBasicConstructionsAndDatatypes
03_JavaBasicConstructionsAndDatatypesdklenov
 
Модель памяти C++ - Андрей Янковский, Яндекс
Модель памяти C++ - Андрей Янковский, ЯндексМодель памяти C++ - Андрей Янковский, Яндекс
Модель памяти C++ - Андрей Янковский, ЯндексYandex
 

Similar to 4. java lecture exceptions (16)

модуль 05 обработка исключений
модуль 05 обработка исключениймодуль 05 обработка исключений
модуль 05 обработка исключений
 
Илья Фофанов "Обработка ошибок в C#"
Илья Фофанов "Обработка ошибок в C#"Илья Фофанов "Обработка ошибок в C#"
Илья Фофанов "Обработка ошибок в C#"
 
Исключения и ошибки
Исключения и ошибкиИсключения и ошибки
Исключения и ошибки
 
Лекция 7. Исключения и менеджеры контекста.
Лекция 7. Исключения и менеджеры контекста.Лекция 7. Исключения и менеджеры контекста.
Лекция 7. Исключения и менеджеры контекста.
 
Обработка ошибок
Обработка ошибокОбработка ошибок
Обработка ошибок
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.
 
javascript
javascriptjavascript
javascript
 
javascript_part1
javascript_part1javascript_part1
javascript_part1
 
#2 "Распространённые ошибки в JavaScript" Денис Речкунов
#2 "Распространённые ошибки в JavaScript" Денис Речкунов#2 "Распространённые ошибки в JavaScript" Денис Речкунов
#2 "Распространённые ошибки в JavaScript" Денис Речкунов
 
C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey Teplyakov
 
03_JavaBasicConstructionsAndDatatypes
03_JavaBasicConstructionsAndDatatypes03_JavaBasicConstructionsAndDatatypes
03_JavaBasicConstructionsAndDatatypes
 
Bytecode
BytecodeBytecode
Bytecode
 
Lab5
Lab5Lab5
Lab5
 
Модель памяти C++ - Андрей Янковский, Яндекс
Модель памяти C++ - Андрей Янковский, ЯндексМодель памяти C++ - Андрей Янковский, Яндекс
Модель памяти C++ - Андрей Янковский, Яндекс
 

More from MERA_school

2. java lecture syntax
2. java lecture syntax2. java lecture syntax
2. java lecture syntaxMERA_school
 
10. java lecture generics&collections
10. java lecture generics&collections10. java lecture generics&collections
10. java lecture generics&collectionsMERA_school
 
9. java lecture library
9. java lecture library9. java lecture library
9. java lecture libraryMERA_school
 
8. java lecture threads
8. java lecture threads8. java lecture threads
8. java lecture threadsMERA_school
 
7. java lecture events
7. java lecture events7. java lecture events
7. java lecture eventsMERA_school
 
6. java lecture swing
6. java lecture swing6. java lecture swing
6. java lecture swingMERA_school
 
5. java lecture io
5. java lecture io5. java lecture io
5. java lecture ioMERA_school
 
3. java lecture classes
3. java lecture classes3. java lecture classes
3. java lecture classesMERA_school
 
1. java lecture intro
1. java lecture intro1. java lecture intro
1. java lecture introMERA_school
 

More from MERA_school (9)

2. java lecture syntax
2. java lecture syntax2. java lecture syntax
2. java lecture syntax
 
10. java lecture generics&collections
10. java lecture generics&collections10. java lecture generics&collections
10. java lecture generics&collections
 
9. java lecture library
9. java lecture library9. java lecture library
9. java lecture library
 
8. java lecture threads
8. java lecture threads8. java lecture threads
8. java lecture threads
 
7. java lecture events
7. java lecture events7. java lecture events
7. java lecture events
 
6. java lecture swing
6. java lecture swing6. java lecture swing
6. java lecture swing
 
5. java lecture io
5. java lecture io5. java lecture io
5. java lecture io
 
3. java lecture classes
3. java lecture classes3. java lecture classes
3. java lecture classes
 
1. java lecture intro
1. java lecture intro1. java lecture intro
1. java lecture intro
 

4. java lecture exceptions

  • 1. Обработка исключений Типы ошибок Ошибки компиляции Времени выполнения (run-time errors, exceptions, исключения) Логические ошибки if (flag == 1) n=0; else n=1; val=1/n; 1
  • 2. Обработка исключений Исключение в Java — это объект некоторого класса, который описывает исключительное состояние, возникшее в каком-либо участке программного кода. При возникновении исключения исполняющая система Java создает объект класса, связанного с данным исключением. Этот объект хранит информацию о возникшей исключительной ситуации (точка возникновения, описание и т.п.) Возможна как автоматическая так и программная генерация исключений. 2
  • 3. Обработка исключений Формат try-catch блока try { // блок кода } catch (ExceptionType1 еxOb1) { // обработчик исключений типа ExceptionType1 } [catch (ExceptionType2 еxOb2) { // обработчик исключений типа ExceptionType2 }] [finally { //код, который выполняется перед выходом из блока try }] 3
  • 4. Обработка исключений Формат try-catch блока try { read_from_file ("data.txt"); calculate(); } catch ( FileNotFoundException fe ) { System.out.println("Файл data.txt не найден"); } catch ( ArithmeticException aex ) { System.out.println("Деление на ноль"); } 4
  • 5. Обработка исключений Формат try-catch блока • управление никогда не возвращается из блока catch обратно в блок try, после выполнения catch-блока управление передается строке, следующей сразу после try-catch-блока; • область видимости catch-блока ограничена ближайшим предшествующим утверждением try, т.е. catch-блок не может захватывать исключение, выброшенное «не своим» try-блоком; • операторы, контролируемые утверждением try, должны быть окружены фигурными скобками даже если это одиночная инструкция. • блоки try могут быть вложенными 5
  • 6. Обработка исключений Стек вызовов Если обработчик не найден исключение передается JVM. 6
  • 8. Обработка исключений Классы исключений никогда не обрабатываются, т.к. не имеет смысла обязательно обрабатывать, иначе код не скомпилируется надо обрабатывать, но компилятор это не проверяет 8
  • 9. Обработка исключений Классы исключений Catch-блоки просматриваются в порядке их появления в программе, при этом обработчик catch для суперкласса перехватывает исключения как для своего класса так и для всех его подклассов. Следовательно, в последовательности catch-блоков подклассы исключений должны следовать перед любым из суперклассов. 9
  • 10. Обработка исключений Классы исключений try {inputFile("data.txt"); calculate(); } catch ( IOException ExObj2) FileNotFoundException ExObj1) {System.out.println("Файл data.txt не найден"); {System.out.println("Ошибка ввода-вывода"); } } Error: catch ( FileNotFoundException ExObj1) IOException ExObj2) {System.out.println("Ошибка ввода-вывода"); unreachable code! {System.out.println("Файл data.txt не найден");} } т.к. FileNotFoundException – подкласс IOException 10
  • 11. Обработка исключений Оператор throw Программная генерация исключения: throw new <ExceptionClassName>(); throw new <ExceptionClassName>(“…”); 11
  • 12. Обработка исключений Оператор throw public void demoproc () {try {throw new NullPointerException("demo"); } catch (NullPointerException e) {System.out.println("caught inside demoproc"); throw e; } } public static void main(String args[]) {try {demoproc(); } catch(NullPointerException e) {System.out.println("recaught: " + e); } } 12
  • 14. Обработка исключений Оператор throws Исключения, которые порождены от Exception, но не от RuntimeException, могут быть сгенерированы только явно операцией throw. При этом если метод может выбрасывать одно из таких исключений, то должно выполняться одно из двух условий: либо для такого исключения должен быть catch-обработчик, либо в заголовке такого метода должна стоять конструкция: throws <ExceptionClassName> (т.н. Catch or Specify Requirement) public String readLine() throws IOException 14
  • 15. Обработка исключений Оператор throws Вызов метода, в описании которого стоит " throws ... ", тоже должен находиться либо внутри try-catch-блока, либо внутри метода с конструкцией " throws ... " в его заголовке и т.д. вплоть до метода main(). Таким образом, где-то в программе любое возможное исключение, попадающее в категорию Catch or Specify Requirement обязано быть перехвачено и обработано. 15
  • 16. Обработка исключений Подклассы Exception class MyException extends Exception {private int detail; MyException(int a) {detail = a; } public String toString() {return "MyException[" + detail + "]"; } } Если надо создать исключение необязательное к перехвату – его надо унаследовать от RuntimeException. 16