SlideShare a Scribd company logo
1 of 14
www.sharkon.kz




            ОБРАБОТКА
        ОШИБОК И ИСКЛЮЧЕНИЙ
                    Нефёдов Константин
Принцип философии Java
www.sharkon.kz




        плохо написанная
        программа не должна
        запускаться
Исключительная ситуация
www.sharkon.kz




   проблема, из-за которой нормальное
     продолжение работы метода или
части программы, выполняющихся в данный
     момент, становится невозможным
Деление на 0
www.sharkon.kz




создается объект, представляющий исключение
текущий поток исполнения останавливается
ссылка на объект, представляющий исключение,
 извлекается из текущего контекста
поиск подходящего места программы для передачи
 исключения
обработчик исключений пытается решить возникшую
 проблему

                 ExceptionExample.java
Создание своих исключений
www.sharkon.kz




                 Exception

                   InheritingExceptions.java
Cтандартный поток ошибок
www.sharkon.kz




            System.err

            e.printStackTrace()




                   FullConstructors.java
Спецификации исключений
www.sharkon.kz




    void f() throws TooBig, TooSmall. DivZero { //...
Перехват произвольных исключений
www.sharkon.kz



  catch(Exception е) {System.out println("nepexвaчeно исключение");}




 String getMessage(), String getLocalizedMessage()
 String toString()
 void printStackTrace(), void printStackTrace(PrintStream),
  void printStackTrace(java.io.PrintWriter)
 Throwable fillInStackTrace()

                  ExceptionMethods.java
Стандартные исключения Java
www.sharkon.kz

                        Throwable

          Error                             Exception
      системные ошибки                   неполадки при исполнении
              и                                 программы
  ошибки времени компиляции



                 RuntimeException
                 возбуждаются в Java автоматически
Завершение с помощью finally
www.sharkon.kz


            try {
                    // Защищенная секция: рискованные операции,
                    // которые могут породить исключения А, В. или С
                 } catch(A al) {
                    // Обработчик для ситуации А
                 } catch(B bl) {
                    // Обработчик для ситуации В
                 } catch(C cl) {
                    // Обработчик для ситуации С
                 } finally {
                   // Действия, производимые в любом случае
                 }


                             FinallyWorks.java
Использование finally с return
www.sharkon.kz




              finally не зависит от того,
             в какой точке защищенной
              секции была выполнена
                     команда return


                    MultipleReturns.java
Проблема потерянных исключений

www.sharkon.kz


             public class ExceptionSilencer {
               public static void main(String[] args) {
                 try {
                   throw new RuntimeException();
                 } finally {
                   // Команда 'return' в блоке finally
                   // прерывает обработку исключения
                   return;
                 }
               }
             }

                   ExceptionSilencer.java
Основные правила обработки исключений

www.sharkon.kz

обработать ошибку на текущем уровне (избегайте перехватывать исключения,
  если вы не знаете, как с ними поступить);
исправить проблему и снова вызвать метод, возбудивший исключение;
предпринять все необходимые действия и продолжить выполнение без
  повторного вызова метода;
попытаться найти альтернативный результат вместо того, который должен был
  бы произвести вызванный метод;
сделать все возможное в текущем контексте и заново возбудить это же
  исключение, перенаправив его на более высокий уровень;
сделать все, что можно в текущем контексте, и возбудить новое исключение,
  перенаправив его на более высокий уровень;
завершить работу программы;
упростить программу (если используемая вами схема обработки исключений
  делает все только сложнее, значит, она никуда не годится);
добавить вашей библиотеке и программе безопасности (сначала это поможет в
  отладке программы, а в дальнейшем окупится ее надежностью).
www.sharkon.kz




      СПАСИБО ЗА ВНИМАНИЕ!

More Related Content

What's hot

Akka и реактивное программирование на JVM
Akka и реактивное программирование на JVMAkka и реактивное программирование на JVM
Akka и реактивное программирование на JVMOpen-IT
 
Нетривиальная обработка ошибок
Нетривиальная обработка ошибокНетривиальная обработка ошибок
Нетривиальная обработка ошибокoelifantiev
 
КРИ 2008. Проектирование игр: функциональный подход
КРИ 2008. Проектирование игр: функциональный подходКРИ 2008. Проектирование игр: функциональный подход
КРИ 2008. Проектирование игр: функциональный подходKirill Lebedev
 
Аскетичная разработка браузера
Аскетичная разработка браузераАскетичная разработка браузера
Аскетичная разработка браузераPlatonov Sergey
 
О чем мы забываем в QA или “Знакомьтесь – Manageability!”
О чем мы забываем в QA или “Знакомьтесь – Manageability!”О чем мы забываем в QA или “Знакомьтесь – Manageability!”
О чем мы забываем в QA или “Знакомьтесь – Manageability!”SQALab
 
OpenMP и статический анализ кода
OpenMP и статический анализ кодаOpenMP и статический анализ кода
OpenMP и статический анализ кодаTatyanazaxarova
 
#2 "Распространённые ошибки в JavaScript" Денис Речкунов
#2 "Распространённые ошибки в JavaScript" Денис Речкунов#2 "Распространённые ошибки в JavaScript" Денис Речкунов
#2 "Распространённые ошибки в JavaScript" Денис РечкуновJSib
 
What's new in java.util.concurrent
What's new in java.util.concurrentWhat's new in java.util.concurrent
What's new in java.util.concurrentDmitry Chuyko
 
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
"Истории из жизни опытного iOS разработчика"— Игорь ЧертенковImprove Group
 
Тестируем тесты с PIT (мутационное тестирование)
Тестируем тесты с PIT (мутационное тестирование)Тестируем тесты с PIT (мутационное тестирование)
Тестируем тесты с PIT (мутационное тестирование)Vitebsk Miniq
 
Продвинутое использование Celery — Александр Кошелев
Продвинутое использование Celery — Александр КошелевПродвинутое использование Celery — Александр Кошелев
Продвинутое использование Celery — Александр КошелевYandex
 
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...Platonov Sergey
 
JPoint 2016 - Etudes of DIY Java profiler
JPoint 2016 - Etudes of DIY Java profilerJPoint 2016 - Etudes of DIY Java profiler
JPoint 2016 - Etudes of DIY Java profilerAnton Arhipov
 
#7 "Многообещающий JavaScript – Promises" Денис Речкунов
#7 "Многообещающий JavaScript – Promises" Денис Речкунов#7 "Многообещающий JavaScript – Promises" Денис Речкунов
#7 "Многообещающий JavaScript – Promises" Денис РечкуновJSib
 

What's hot (20)

Akka и реактивное программирование на JVM
Akka и реактивное программирование на JVMAkka и реактивное программирование на JVM
Akka и реактивное программирование на JVM
 
Нетривиальная обработка ошибок
Нетривиальная обработка ошибокНетривиальная обработка ошибок
Нетривиальная обработка ошибок
 
КРИ 2008. Проектирование игр: функциональный подход
КРИ 2008. Проектирование игр: функциональный подходКРИ 2008. Проектирование игр: функциональный подход
КРИ 2008. Проектирование игр: функциональный подход
 
Presentation_1369080393540
Presentation_1369080393540Presentation_1369080393540
Presentation_1369080393540
 
Аскетичная разработка браузера
Аскетичная разработка браузераАскетичная разработка браузера
Аскетичная разработка браузера
 
О чем мы забываем в QA или “Знакомьтесь – Manageability!”
О чем мы забываем в QA или “Знакомьтесь – Manageability!”О чем мы забываем в QA или “Знакомьтесь – Manageability!”
О чем мы забываем в QA или “Знакомьтесь – Manageability!”
 
OpenMP и статический анализ кода
OpenMP и статический анализ кодаOpenMP и статический анализ кода
OpenMP и статический анализ кода
 
Gen server
Gen serverGen server
Gen server
 
#2 "Распространённые ошибки в JavaScript" Денис Речкунов
#2 "Распространённые ошибки в JavaScript" Денис Речкунов#2 "Распространённые ошибки в JavaScript" Денис Речкунов
#2 "Распространённые ошибки в JavaScript" Денис Речкунов
 
What's new in java.util.concurrent
What's new in java.util.concurrentWhat's new in java.util.concurrent
What's new in java.util.concurrent
 
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
 
Тестируем тесты с PIT (мутационное тестирование)
Тестируем тесты с PIT (мутационное тестирование)Тестируем тесты с PIT (мутационное тестирование)
Тестируем тесты с PIT (мутационное тестирование)
 
C++ exceptions
C++ exceptionsC++ exceptions
C++ exceptions
 
Продвинутое использование Celery — Александр Кошелев
Продвинутое использование Celery — Александр КошелевПродвинутое использование Celery — Александр Кошелев
Продвинутое использование Celery — Александр Кошелев
 
Mocks and stubs
Mocks and stubsMocks and stubs
Mocks and stubs
 
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
 
JPoint 2016 - Etudes of DIY Java profiler
JPoint 2016 - Etudes of DIY Java profilerJPoint 2016 - Etudes of DIY Java profiler
JPoint 2016 - Etudes of DIY Java profiler
 
#7 "Многообещающий JavaScript – Promises" Денис Речкунов
#7 "Многообещающий JavaScript – Promises" Денис Речкунов#7 "Многообещающий JavaScript – Promises" Денис Речкунов
#7 "Многообещающий JavaScript – Promises" Денис Речкунов
 
Bytecode
BytecodeBytecode
Bytecode
 
JRebel
JRebelJRebel
JRebel
 

Similar to Обработка ошибок и исключений

обработка исключений в Java
обработка исключений в Javaобработка исключений в Java
обработка исключений в Javametaform
 
Исключения и ошибки
Исключения и ошибкиИсключения и ошибки
Исключения и ошибкиUnguryan Vitaliy
 
Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Dima Dzuba
 
05 Обработка Исключений
05 Обработка Исключений05 Обработка Исключений
05 Обработка Исключенийphearnot
 
Msu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling ExceptionsMsu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling Exceptionsolegol
 
Курс Java-2016. Занятие 10. Reflection, mock
Курс Java-2016. Занятие 10. Reflection, mockКурс Java-2016. Занятие 10. Reflection, mock
Курс Java-2016. Занятие 10. Reflection, mock7bits
 
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
 
DUMP-2015: «Распределенная обработка миллионов документов на Scala и Akka» Ст...
DUMP-2015: «Распределенная обработка миллионов документов на Scala и Akka» Ст...DUMP-2015: «Распределенная обработка миллионов документов на Scala и Akka» Ст...
DUMP-2015: «Распределенная обработка миллионов документов на Scala и Akka» Ст...it-people
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаSQALab
 
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Andrey Karpov
 
C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.Igor Shkulipa
 
Unsafe: to be or to be removed?
Unsafe: to be or to be removed?Unsafe: to be or to be removed?
Unsafe: to be or to be removed?Alexey Fyodorov
 
Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2Alex Tumanoff
 
Веселая ферма. Соседи.
Веселая ферма. Соседи.Веселая ферма. Соседи.
Веселая ферма. Соседи.Doomer Samoiloff
 

Similar to Обработка ошибок и исключений (20)

обработка исключений в Java
обработка исключений в Javaобработка исключений в Java
обработка исключений в Java
 
Exceptions
ExceptionsExceptions
Exceptions
 
Исключения и ошибки
Исключения и ошибкиИсключения и ошибки
Исключения и ошибки
 
Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6
 
05 Обработка Исключений
05 Обработка Исключений05 Обработка Исключений
05 Обработка Исключений
 
Msu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling ExceptionsMsu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling Exceptions
 
Zagursky
ZagurskyZagursky
Zagursky
 
Курс Java-2016. Занятие 10. Reflection, mock
Курс Java-2016. Занятие 10. Reflection, mockКурс Java-2016. Занятие 10. Reflection, mock
Курс Java-2016. Занятие 10. Reflection, mock
 
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.
 
DUMP-2015: «Распределенная обработка миллионов документов на Scala и Akka» Ст...
DUMP-2015: «Распределенная обработка миллионов документов на Scala и Akka» Ст...DUMP-2015: «Распределенная обработка миллионов документов на Scala и Akka» Ст...
DUMP-2015: «Распределенная обработка миллионов документов на Scala и Akka» Ст...
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
 
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
 
Обработка ошибок
Обработка ошибокОбработка ошибок
Обработка ошибок
 
Асинхронный JavaScript
Асинхронный JavaScriptАсинхронный JavaScript
Асинхронный JavaScript
 
C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.
 
Unsafe: to be or to be removed?
Unsafe: to be or to be removed?Unsafe: to be or to be removed?
Unsafe: to be or to be removed?
 
JavaDay'14
JavaDay'14JavaDay'14
JavaDay'14
 
ZooKeeper Java Cloud
ZooKeeper Java CloudZooKeeper Java Cloud
ZooKeeper Java Cloud
 
Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2
 
Веселая ферма. Соседи.
Веселая ферма. Соседи.Веселая ферма. Соседи.
Веселая ферма. Соседи.
 

More from itclub_kz

Контейнеры и хранение объектов в ООП
Контейнеры и хранение объектов в ООПКонтейнеры и хранение объектов в ООП
Контейнеры и хранение объектов в ООПitclub_kz
 
интерфейсы в ооп
интерфейсы в оопинтерфейсы в ооп
интерфейсы в оопitclub_kz
 
Отношения между классами
Отношения между классамиОтношения между классами
Отношения между классамиitclub_kz
 
Основы объектно-ориентированного программирования
Основы объектно-ориентированного программированияОсновы объектно-ориентированного программирования
Основы объектно-ориентированного программированияitclub_kz
 
философия Java
философия Javaфилософия Java
философия Javaitclub_kz
 
информационные технологии
информационные технологииинформационные технологии
информационные технологииitclub_kz
 

More from itclub_kz (6)

Контейнеры и хранение объектов в ООП
Контейнеры и хранение объектов в ООПКонтейнеры и хранение объектов в ООП
Контейнеры и хранение объектов в ООП
 
интерфейсы в ооп
интерфейсы в оопинтерфейсы в ооп
интерфейсы в ооп
 
Отношения между классами
Отношения между классамиОтношения между классами
Отношения между классами
 
Основы объектно-ориентированного программирования
Основы объектно-ориентированного программированияОсновы объектно-ориентированного программирования
Основы объектно-ориентированного программирования
 
философия Java
философия Javaфилософия Java
философия Java
 
информационные технологии
информационные технологииинформационные технологии
информационные технологии
 

Обработка ошибок и исключений

  • 1. www.sharkon.kz ОБРАБОТКА ОШИБОК И ИСКЛЮЧЕНИЙ Нефёдов Константин
  • 2. Принцип философии Java www.sharkon.kz плохо написанная программа не должна запускаться
  • 3. Исключительная ситуация www.sharkon.kz проблема, из-за которой нормальное продолжение работы метода или части программы, выполняющихся в данный момент, становится невозможным
  • 4. Деление на 0 www.sharkon.kz создается объект, представляющий исключение текущий поток исполнения останавливается ссылка на объект, представляющий исключение, извлекается из текущего контекста поиск подходящего места программы для передачи исключения обработчик исключений пытается решить возникшую проблему ExceptionExample.java
  • 6. Cтандартный поток ошибок www.sharkon.kz System.err e.printStackTrace() FullConstructors.java
  • 7. Спецификации исключений www.sharkon.kz void f() throws TooBig, TooSmall. DivZero { //...
  • 8. Перехват произвольных исключений www.sharkon.kz catch(Exception е) {System.out println("nepexвaчeно исключение");} String getMessage(), String getLocalizedMessage() String toString() void printStackTrace(), void printStackTrace(PrintStream), void printStackTrace(java.io.PrintWriter) Throwable fillInStackTrace() ExceptionMethods.java
  • 9. Стандартные исключения Java www.sharkon.kz Throwable Error Exception системные ошибки неполадки при исполнении и программы ошибки времени компиляции RuntimeException возбуждаются в Java автоматически
  • 10. Завершение с помощью finally www.sharkon.kz try { // Защищенная секция: рискованные операции, // которые могут породить исключения А, В. или С } catch(A al) { // Обработчик для ситуации А } catch(B bl) { // Обработчик для ситуации В } catch(C cl) { // Обработчик для ситуации С } finally { // Действия, производимые в любом случае } FinallyWorks.java
  • 11. Использование finally с return www.sharkon.kz finally не зависит от того, в какой точке защищенной секции была выполнена команда return MultipleReturns.java
  • 12. Проблема потерянных исключений www.sharkon.kz public class ExceptionSilencer { public static void main(String[] args) { try { throw new RuntimeException(); } finally { // Команда 'return' в блоке finally // прерывает обработку исключения return; } } } ExceptionSilencer.java
  • 13. Основные правила обработки исключений www.sharkon.kz обработать ошибку на текущем уровне (избегайте перехватывать исключения, если вы не знаете, как с ними поступить); исправить проблему и снова вызвать метод, возбудивший исключение; предпринять все необходимые действия и продолжить выполнение без повторного вызова метода; попытаться найти альтернативный результат вместо того, который должен был бы произвести вызванный метод; сделать все возможное в текущем контексте и заново возбудить это же исключение, перенаправив его на более высокий уровень; сделать все, что можно в текущем контексте, и возбудить новое исключение, перенаправив его на более высокий уровень; завершить работу программы; упростить программу (если используемая вами схема обработки исключений делает все только сложнее, значит, она никуда не годится); добавить вашей библиотеке и программе безопасности (сначала это поможет в отладке программы, а в дальнейшем окупится ее надежностью).
  • 14. www.sharkon.kz СПАСИБО ЗА ВНИМАНИЕ!