SlideShare a Scribd company logo
1 of 31
Обработка
исключений в
Java
Обработка ошибок,
создание надѐжных
программ

    www.spro-club.ru
Рассматриваемые вопросы
 Актуальностьобработки ошибок
 Причины возникновения ошибок и их
  классификация
 Понятие исключительной ситуации
 Старый и новый подходы к обработке
  ошибок
 Механизм обработки исключений в
  Java
 Типы исключений. Иерархия их классов.
Пример потенциально
    опасного кода программы
int a = Integer.parseInt(jTextField1.getText());
int b = Integer.parseInt(jTextField2.getText());
Int c = a / b;

     Какие ошибки могут возникнуть в этой
      программе?
     Что произойдѐт при возникновении
      ошибки?
     Как можно сделать программу более
      надѐжной?
Текущая ситуация
 При выполнении программы иногда
  могут возникать ошибки
Причины:
 Ошибки программиста
 Внешние причины
    ошибка ввода/вывода при работе с
     файлом или сетевым соединением
    Сбой при работе с БД
    И т.п.
Причины ошибок
 Невнимательность   (ошибки)
 программиста:
    отсутствует нужный класс, или индекс
     массива вышел за допустимые границы
     и т.п.
 Независящие   от программиста
 причины:
    произошел разрыв сетевого
     соединения, сбой аппаратного
     обеспечения, например, жесткого
     диска, и др.
Предпосылки
   Профессионально написанная
    программа должна сохранять
    работоспособность во всевозможных
    ситуациях
   Для этого нужно предусмотреть в
    программе механизмы обработки ошибок
   Самый очевидный, но не самый простой
    способ – проверка условий с помощью
    оператора if
Решения в старом стиле
    В   классических языках
       программирования, например в С,
       требовалось проверять некое условие,
       которое указывало на наличие
       ошибки и, в зависимости от этого
       предпринимать определенные
       действия
…
int statusCode = someAction();
if (statusCode){
 … обработка ошибки
} else{
 statusCode = anotherAction();
 if(statusCode){
   … обработка ошибки …
 }
}…
Пример
Int a, b, c;
if (является ли строка1 числом)
  a = Integer.parseInt(jTextField1.getText());
if (является ли строка2 числом)
  b = Integer.parseInt(jTextField2.getText());
if (b != 0)
  c = a / b;
Решение в стиле Java
    В  Java появилось более простое и
      элегантное решение - обработка
      исключительных ситуаций
try{
  someAction();
  anotherAction()
}catch(Exception e){
  … обработка исключительной ситуации
}
     такойподход является также более
      надежным и простым для понимания
Причины возникновения
ошибок
Существует три причины возникновения
исключительных ситуаций:
 Попытка выполнить некорректное
  выражение
 Выполнение оператора throw (выброс
  исключения)
 Асинхронные ошибки во время
  исполнения программы
Попытка выполнить
некорректное выражение
 Например:
    деление на ноль,
    обращение к объекту по ссылке, равной
     null
     попытка использовать класс, описание
     которого (class-файл) отсутствует, и т.д.
В таких случаях всегда можно точно
 указать, в каком месте произошла
 ошибка - именно в некорректном
 выражении
Выполнение оператора
throw
 Throw – оператор выброса исключения
 Очевидно, что и здесь можно легко
  указать место возникновения
  исключительной ситуации
Асинхронные ошибки во
время исполнения
программы
   Причиной таких ошибок могут быть сбои
    внутри самой виртуальной машины (ведь она
    также является программой), или вызов
    метода stop() у потока выполнения thread)
   В этом случае невозможно указать точное
    место программы, где происходит
    исключительная ситуация. Если мы
    пытаемся остановить поток выполнения
    (вызвав метод stop()), то мы не можем
    предсказать, при выполнении какого именно
    выражения этот поток остановится
Виды ошибок
 Синхронные
 Асинхронные


 Первыесравнительно проще, так как
 принципиально возможно найти
 точное место в коде, которое является
 причиной возникновения
 исключительной ситуации
Передача управления в
исключительной ситуации
   При возникновении исключительной
    ситуации управление передается от
    кода, вызвавшего исключительную
    ситуацию, на ближайший блок catch
    (или вверх по стеку), и создается объект,
    унаследованный от класса Throwable или
    его потомков, который содержит
    информацию об исключительной
    ситуации и используется при ее
    обработке.
   Собственно в блоке catch указывается
    именно класс обрабатываемой ситуации
Иерархия передачи
информации об исключении
Зависит от места возникновения
исключения. Если это:
 метод, то управление будет
  передаваться в то место, где этот метод
  был вызван
 конструктор, то управление будет
  передаваться туда, где попытались
  создать объект (как правило, применяя
  оператор new);
Обработка исключений
try {
  потенциально_опаные_операторы();
} catch (ТипИсключения1 переменная1) {
  код по обработке исключения типа 1
} catch (ТипИсключения2 переменная2) {
  код по обработке исключения типа 2
} finally {
  операторы, кот. будут всегда (и в случае нормальной
  работы, и в случае возникновения исключений)
}
Пример

int a, b, c;
try {
  a = Integer.parseInt(jTextField1.getText());
  b = Integer.parseInt(jTextField2.getText());
  c = a / b;
} catch (ArithmeticException e) {
  System.out.println(“Попытка деления на 0”);
} catch (NumberFormatException e) {
  System.out.println(“Ошибка преобразования из строки в
число”);
}
Описание обработки
 Сначала    выполняется код заключенный
  в фигурные скобки оператора try.
 Если во время его выполнения не
  происходит никаких нештатных
  ситуаций, то далее управление
  передается, за закрывающую
  фигурную скобку последнего
  оператор catch, ассоциированного с
  данным оператором try или блоку
  finnaly, если он присутствует
Описание обработки
   Если возникла исключительная ситуация,
    класс которой указан в качестве параметра
    одного из блоков catch.
   В этом случае производится выполнение
    блока кода ассоциированного с этим catch
    (заключенного в фигурные скобки).
   Далее если код в этом блоке завершается
    нормально, то и весть оператор try
    завершается нормально и управление
    передается на оператор (выражение)
    следующий за закрывающей фигурной
    скобкой последнего catch ассоциированного
    с данным try.
   Если код в catch завершается нештатно, то и
    весь try завершается нештатно по той же
    причине
Описание обработки
 есливозникла исключительная
 ситуация, которая класс которой не
 указан в качестве аргумента, ни в
 одном catch, то выполнение всего try
 завершается нештатно
Принцип обработки
 Если  в последовательности операторов
  могут возникнуть как ошибки
  ввода/вывода так и ошибки
  арифметических вычислений, вовсе нет
  нужды помещать различные
  фрагменты кода в разные операторы
  try{}catch(){}.
 Достаточно обеспечить несколько
  catch() для различных типов
  исключений
Принципы обработки
Вкаком месте программы обрабатывать
 исключения?
    Если есть возможность написать код, который
     может устранить причину исключения так, чтобы
     программа могла продолжить нормальную
     работу, следует написать этот код в
     соответствующем блоке catch
    В обработчике одного исключения (в блоке catch)
     можно выбросить другое исключение с помощью
     оператора throw:
catch (SQLException e) {
…
throw new LoginException( e );
}
Иерархия классов исключений
Обрабатываемые и
необрабатываемые исключения
Все исключения делятся на 2 категории:
 Обрабатываемые (проверяемые)
  (checked)
 Необрабатываемые (непроверяемые)
  (unchecked)

Исключения, порожденные от
java.lang.RunTimeException, являются
необрабатываемыми, и компилятор не
требует обязательной их обработки
Обрабатываемые искл.
   Все исключения, порожденные от
    java.lang.Exception являются
    обрабатываемыми. Т.е. во время компиляции
    проверяется - предусмотрена ли обработка
    возможных исключительных ситуаций
   Как правило, обрабатываемые исключения
    предназначены для обработки ситуаций
    связанных с окружением программы
    (сетевым, файловым вводом-выводом и др.),
    которые могут возникнуть вне зависимости от
    того, корректно написан код или нет.
   Например, открытие сетевого соединения или
    файла может привести к возникновению
    ошибки, и компилятор требует от
    программиста предусмотреть некие
    действия для обработки возможных проблем.
Необрабатываемые искл.
 Необрабатываемые      исключения, это
  ошибки программы, которые при
  правильном кодировании возникать не
  должны (например,
  java.lang.IndexOfBoundException,
  java.lang.ArifmeticException возникают
  соответственно при указании индекса
  выходящего за границы массива и при
  делении на ноль).
 Поэтому, чтобы не загромождать
  программу, компилятор разрешает не
  обрабатывать с помощью блоков try{}
  catch() исключения этого типа
Ошибки (error)
 Исключения,порожденные от Error, так
 же не являются обрабатываемыми.
 Эти ошибки предназначены для того
 что бы уведомить программу о
 возникновении сбоев которые
 программным способом устранить
 сложно, или невозможно вообще. В
 качестве примера можно привести
 StackOverflowError, OutOfMemoryError
Оператор throw
Создание собственных
   классов исключений
public class ServerTimedOutException extends Exception {
    private int port;
    public ServerTimedOutException( String message, int
port) {
        super( message );
        this.port = port;
     }
    public int getPort() {
        return port;
     }
 }
Д/З
   Изучить презентацию
   Изучить доп.материал (лекция № 15 курса
    Программирование на Java)
   запустить демо-программу
   добавить в неѐ работу с массивом, кот.
    вызывает выход за его границу (например, в
    методе создаѐтся массив из 10 элементов,
    а пользователь должен ввести № элемента,
    значение кот. он хочет увидеть на экране).
    Использовать ArrayOutOfBoundException

More Related Content

What's hot

Msu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling ExceptionsMsu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling Exceptionsolegol
 
Глава 3: примитивные типы и операции с ними в Java
Глава 3: примитивные типы и операции с ними в JavaГлава 3: примитивные типы и операции с ними в Java
Глава 3: примитивные типы и операции с ними в Javametaform
 
Базовые операторы Java
Базовые операторы JavaБазовые операторы Java
Базовые операторы Javametaform
 
Автоматическая генерация тестов по комментариям к программному коду
Автоматическая генерация тестов по комментариям к программному кодуАвтоматическая генерация тестов по комментариям к программному коду
Автоматическая генерация тестов по комментариям к программному кодуAlexey Noskov
 
C++ осень 2013 лекция 5
C++ осень 2013 лекция 5C++ осень 2013 лекция 5
C++ осень 2013 лекция 5Technopark
 
ук 03.001.02 2011
ук 03.001.02 2011ук 03.001.02 2011
ук 03.001.02 2011etyumentcev
 
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
 
C++ осень 2013 лекция 4
C++ осень 2013 лекция 4C++ осень 2013 лекция 4
C++ осень 2013 лекция 4Technopark
 
Массивы в Java
Массивы в JavaМассивы в Java
Массивы в Javametaform
 

What's hot (10)

Msu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling ExceptionsMsu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling Exceptions
 
Глава 3: примитивные типы и операции с ними в Java
Глава 3: примитивные типы и операции с ними в JavaГлава 3: примитивные типы и операции с ними в Java
Глава 3: примитивные типы и операции с ними в Java
 
WTF Code @ jug.lv
WTF Code @ jug.lvWTF Code @ jug.lv
WTF Code @ jug.lv
 
Базовые операторы Java
Базовые операторы JavaБазовые операторы Java
Базовые операторы Java
 
Автоматическая генерация тестов по комментариям к программному коду
Автоматическая генерация тестов по комментариям к программному кодуАвтоматическая генерация тестов по комментариям к программному коду
Автоматическая генерация тестов по комментариям к программному коду
 
C++ осень 2013 лекция 5
C++ осень 2013 лекция 5C++ осень 2013 лекция 5
C++ осень 2013 лекция 5
 
ук 03.001.02 2011
ук 03.001.02 2011ук 03.001.02 2011
ук 03.001.02 2011
 
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.
 
C++ осень 2013 лекция 4
C++ осень 2013 лекция 4C++ осень 2013 лекция 4
C++ осень 2013 лекция 4
 
Массивы в Java
Массивы в JavaМассивы в Java
Массивы в Java
 

Viewers also liked

создание живых сайтов
создание живых сайтовсоздание живых сайтов
создание живых сайтовmetaform
 
Обзор MS.Net Framework
Обзор MS.Net FrameworkОбзор MS.Net Framework
Обзор MS.Net Frameworkmcroitor
 
Введение в MFC
Введение в MFCВведение в MFC
Введение в MFCmcroitor
 
особенности программирования на с++
особенности программирования на с++особенности программирования на с++
особенности программирования на с++mcroitor
 
стандартная библиотека с++: введение
стандартная библиотека с++: введениестандартная библиотека с++: введение
стандартная библиотека с++: введениеmcroitor
 
библиотеки программирования
библиотеки программированиябиблиотеки программирования
библиотеки программированияmcroitor
 
C++ и базы данных
C++ и базы данныхC++ и базы данных
C++ и базы данныхmcroitor
 
Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...metaform
 

Viewers also liked (8)

создание живых сайтов
создание живых сайтовсоздание живых сайтов
создание живых сайтов
 
Обзор MS.Net Framework
Обзор MS.Net FrameworkОбзор MS.Net Framework
Обзор MS.Net Framework
 
Введение в MFC
Введение в MFCВведение в MFC
Введение в MFC
 
особенности программирования на с++
особенности программирования на с++особенности программирования на с++
особенности программирования на с++
 
стандартная библиотека с++: введение
стандартная библиотека с++: введениестандартная библиотека с++: введение
стандартная библиотека с++: введение
 
библиотеки программирования
библиотеки программированиябиблиотеки программирования
библиотеки программирования
 
C++ и базы данных
C++ и базы данныхC++ и базы данных
C++ и базы данных
 
Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...
 

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

4. java lecture exceptions
4. java lecture exceptions4. java lecture exceptions
4. java lecture exceptionsMERA_school
 
Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Dima Dzuba
 
Исключения и ошибки
Исключения и ошибкиИсключения и ошибки
Исключения и ошибкиUnguryan Vitaliy
 
Илья Фофанов "Обработка ошибок в C#"
Илья Фофанов "Обработка ошибок в C#"Илья Фофанов "Обработка ошибок в C#"
Илья Фофанов "Обработка ошибок в C#"Yulia Tsisyk
 
Многопоточное программирование на C#, путевые заметки
Многопоточное программирование на C#, путевые заметкиМногопоточное программирование на C#, путевые заметки
Многопоточное программирование на C#, путевые заметкиDotNetConf
 
Lecture5
Lecture5Lecture5
Lecture5orgil
 
Исключительные ситуации
Исключительные ситуацииИсключительные ситуации
Исключительные ситуацииAlexey Bovanenko
 
Обработка ошибок и исключений
Обработка ошибок и исключенийОбработка ошибок и исключений
Обработка ошибок и исключенийitclub_kz
 
модуль 05 обработка исключений
модуль 05 обработка исключениймодуль 05 обработка исключений
модуль 05 обработка исключенийYevgeniy Gertsen
 
C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.Igor Shkulipa
 
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
 
03_JavaBasicConstructionsAndDatatypes
03_JavaBasicConstructionsAndDatatypes03_JavaBasicConstructionsAndDatatypes
03_JavaBasicConstructionsAndDatatypesdklenov
 
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Andrey Karpov
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesPlatonov Sergey
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesPlatonov Sergey
 
Обработка исключений
Обработка исключенийОбработка исключений
Обработка исключенийZhaslan Doschanov
 
Память в Java. Garbage Collector
Память в Java. Garbage CollectorПамять в Java. Garbage Collector
Память в Java. Garbage CollectorOlexandra Dmytrenko
 

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

4. java lecture exceptions
4. java lecture exceptions4. java lecture exceptions
4. java lecture exceptions
 
Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6
 
Исключения и ошибки
Исключения и ошибкиИсключения и ошибки
Исключения и ошибки
 
Илья Фофанов "Обработка ошибок в C#"
Илья Фофанов "Обработка ошибок в C#"Илья Фофанов "Обработка ошибок в C#"
Илья Фофанов "Обработка ошибок в C#"
 
Многопоточное программирование на C#, путевые заметки
Многопоточное программирование на C#, путевые заметкиМногопоточное программирование на C#, путевые заметки
Многопоточное программирование на C#, путевые заметки
 
Lecture5
Lecture5Lecture5
Lecture5
 
Исключительные ситуации
Исключительные ситуацииИсключительные ситуации
Исключительные ситуации
 
Обработка ошибок и исключений
Обработка ошибок и исключенийОбработка ошибок и исключений
Обработка ошибок и исключений
 
модуль 05 обработка исключений
модуль 05 обработка исключениймодуль 05 обработка исключений
модуль 05 обработка исключений
 
C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.
 
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
 
03_JavaBasicConstructionsAndDatatypes
03_JavaBasicConstructionsAndDatatypes03_JavaBasicConstructionsAndDatatypes
03_JavaBasicConstructionsAndDatatypes
 
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
 
course js day 2
course js day 2course js day 2
course js day 2
 
Обработка исключений
Обработка исключенийОбработка исключений
Обработка исключений
 
Память в Java. Garbage Collector
Память в Java. Garbage CollectorПамять в Java. Garbage Collector
Память в Java. Garbage Collector
 

More from metaform

Приступаем к разработке Android приложений
Приступаем к разработке Android приложенийПриступаем к разработке Android приложений
Приступаем к разработке Android приложенийmetaform
 
работа с потоками ввода вывода
работа с потоками ввода выводаработа с потоками ввода вывода
работа с потоками ввода выводаmetaform
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Javametaform
 
Работа с БД в Java
Работа с БД в JavaРабота с БД в Java
Работа с БД в Javametaform
 
Составление резюме
Составление резюмеСоставление резюме
Составление резюмеmetaform
 
Коллекции в Java
Коллекции в JavaКоллекции в Java
Коллекции в Javametaform
 
Лекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследованиеЛекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследованиеmetaform
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Javametaform
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansmetaform
 
Глава1: Обзор технологии Java
Глава1: Обзор технологии JavaГлава1: Обзор технологии Java
Глава1: Обзор технологии Javametaform
 
Мастерство речи, искусство презентации
Мастерство речи, искусство презентацииМастерство речи, искусство презентации
Мастерство речи, искусство презентацииmetaform
 

More from metaform (11)

Приступаем к разработке Android приложений
Приступаем к разработке Android приложенийПриступаем к разработке Android приложений
Приступаем к разработке Android приложений
 
работа с потоками ввода вывода
работа с потоками ввода выводаработа с потоками ввода вывода
работа с потоками ввода вывода
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
Работа с БД в Java
Работа с БД в JavaРабота с БД в Java
Работа с БД в Java
 
Составление резюме
Составление резюмеСоставление резюме
Составление резюме
 
Коллекции в Java
Коллекции в JavaКоллекции в Java
Коллекции в Java
 
Лекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследованиеЛекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследование
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeans
 
Глава1: Обзор технологии Java
Глава1: Обзор технологии JavaГлава1: Обзор технологии Java
Глава1: Обзор технологии Java
 
Мастерство речи, искусство презентации
Мастерство речи, искусство презентацииМастерство речи, искусство презентации
Мастерство речи, искусство презентации
 

обработка исключений в Java

  • 2. Рассматриваемые вопросы  Актуальностьобработки ошибок  Причины возникновения ошибок и их классификация  Понятие исключительной ситуации  Старый и новый подходы к обработке ошибок  Механизм обработки исключений в Java  Типы исключений. Иерархия их классов.
  • 3. Пример потенциально опасного кода программы int a = Integer.parseInt(jTextField1.getText()); int b = Integer.parseInt(jTextField2.getText()); Int c = a / b;  Какие ошибки могут возникнуть в этой программе?  Что произойдѐт при возникновении ошибки?  Как можно сделать программу более надѐжной?
  • 4. Текущая ситуация  При выполнении программы иногда могут возникать ошибки Причины:  Ошибки программиста  Внешние причины  ошибка ввода/вывода при работе с файлом или сетевым соединением  Сбой при работе с БД  И т.п.
  • 5. Причины ошибок  Невнимательность (ошибки) программиста:  отсутствует нужный класс, или индекс массива вышел за допустимые границы и т.п.  Независящие от программиста причины:  произошел разрыв сетевого соединения, сбой аппаратного обеспечения, например, жесткого диска, и др.
  • 6. Предпосылки  Профессионально написанная программа должна сохранять работоспособность во всевозможных ситуациях  Для этого нужно предусмотреть в программе механизмы обработки ошибок  Самый очевидный, но не самый простой способ – проверка условий с помощью оператора if
  • 7. Решения в старом стиле В классических языках программирования, например в С, требовалось проверять некое условие, которое указывало на наличие ошибки и, в зависимости от этого предпринимать определенные действия … int statusCode = someAction(); if (statusCode){ … обработка ошибки } else{ statusCode = anotherAction(); if(statusCode){ … обработка ошибки … } }…
  • 8. Пример Int a, b, c; if (является ли строка1 числом) a = Integer.parseInt(jTextField1.getText()); if (является ли строка2 числом) b = Integer.parseInt(jTextField2.getText()); if (b != 0) c = a / b;
  • 9. Решение в стиле Java В Java появилось более простое и элегантное решение - обработка исключительных ситуаций try{ someAction(); anotherAction() }catch(Exception e){ … обработка исключительной ситуации }  такойподход является также более надежным и простым для понимания
  • 10. Причины возникновения ошибок Существует три причины возникновения исключительных ситуаций:  Попытка выполнить некорректное выражение  Выполнение оператора throw (выброс исключения)  Асинхронные ошибки во время исполнения программы
  • 11. Попытка выполнить некорректное выражение  Например:  деление на ноль,  обращение к объекту по ссылке, равной null  попытка использовать класс, описание которого (class-файл) отсутствует, и т.д. В таких случаях всегда можно точно указать, в каком месте произошла ошибка - именно в некорректном выражении
  • 12. Выполнение оператора throw  Throw – оператор выброса исключения  Очевидно, что и здесь можно легко указать место возникновения исключительной ситуации
  • 13. Асинхронные ошибки во время исполнения программы  Причиной таких ошибок могут быть сбои внутри самой виртуальной машины (ведь она также является программой), или вызов метода stop() у потока выполнения thread)  В этом случае невозможно указать точное место программы, где происходит исключительная ситуация. Если мы пытаемся остановить поток выполнения (вызвав метод stop()), то мы не можем предсказать, при выполнении какого именно выражения этот поток остановится
  • 14. Виды ошибок  Синхронные  Асинхронные  Первыесравнительно проще, так как принципиально возможно найти точное место в коде, которое является причиной возникновения исключительной ситуации
  • 15. Передача управления в исключительной ситуации  При возникновении исключительной ситуации управление передается от кода, вызвавшего исключительную ситуацию, на ближайший блок catch (или вверх по стеку), и создается объект, унаследованный от класса Throwable или его потомков, который содержит информацию об исключительной ситуации и используется при ее обработке.  Собственно в блоке catch указывается именно класс обрабатываемой ситуации
  • 16. Иерархия передачи информации об исключении Зависит от места возникновения исключения. Если это:  метод, то управление будет передаваться в то место, где этот метод был вызван  конструктор, то управление будет передаваться туда, где попытались создать объект (как правило, применяя оператор new);
  • 17. Обработка исключений try { потенциально_опаные_операторы(); } catch (ТипИсключения1 переменная1) { код по обработке исключения типа 1 } catch (ТипИсключения2 переменная2) { код по обработке исключения типа 2 } finally { операторы, кот. будут всегда (и в случае нормальной работы, и в случае возникновения исключений) }
  • 18. Пример int a, b, c; try { a = Integer.parseInt(jTextField1.getText()); b = Integer.parseInt(jTextField2.getText()); c = a / b; } catch (ArithmeticException e) { System.out.println(“Попытка деления на 0”); } catch (NumberFormatException e) { System.out.println(“Ошибка преобразования из строки в число”); }
  • 19. Описание обработки  Сначала выполняется код заключенный в фигурные скобки оператора try.  Если во время его выполнения не происходит никаких нештатных ситуаций, то далее управление передается, за закрывающую фигурную скобку последнего оператор catch, ассоциированного с данным оператором try или блоку finnaly, если он присутствует
  • 20. Описание обработки  Если возникла исключительная ситуация, класс которой указан в качестве параметра одного из блоков catch.  В этом случае производится выполнение блока кода ассоциированного с этим catch (заключенного в фигурные скобки).  Далее если код в этом блоке завершается нормально, то и весть оператор try завершается нормально и управление передается на оператор (выражение) следующий за закрывающей фигурной скобкой последнего catch ассоциированного с данным try.  Если код в catch завершается нештатно, то и весь try завершается нештатно по той же причине
  • 21. Описание обработки  есливозникла исключительная ситуация, которая класс которой не указан в качестве аргумента, ни в одном catch, то выполнение всего try завершается нештатно
  • 22. Принцип обработки  Если в последовательности операторов могут возникнуть как ошибки ввода/вывода так и ошибки арифметических вычислений, вовсе нет нужды помещать различные фрагменты кода в разные операторы try{}catch(){}.  Достаточно обеспечить несколько catch() для различных типов исключений
  • 23. Принципы обработки Вкаком месте программы обрабатывать исключения?  Если есть возможность написать код, который может устранить причину исключения так, чтобы программа могла продолжить нормальную работу, следует написать этот код в соответствующем блоке catch  В обработчике одного исключения (в блоке catch) можно выбросить другое исключение с помощью оператора throw: catch (SQLException e) { … throw new LoginException( e ); }
  • 25. Обрабатываемые и необрабатываемые исключения Все исключения делятся на 2 категории:  Обрабатываемые (проверяемые) (checked)  Необрабатываемые (непроверяемые) (unchecked) Исключения, порожденные от java.lang.RunTimeException, являются необрабатываемыми, и компилятор не требует обязательной их обработки
  • 26. Обрабатываемые искл.  Все исключения, порожденные от java.lang.Exception являются обрабатываемыми. Т.е. во время компиляции проверяется - предусмотрена ли обработка возможных исключительных ситуаций  Как правило, обрабатываемые исключения предназначены для обработки ситуаций связанных с окружением программы (сетевым, файловым вводом-выводом и др.), которые могут возникнуть вне зависимости от того, корректно написан код или нет.  Например, открытие сетевого соединения или файла может привести к возникновению ошибки, и компилятор требует от программиста предусмотреть некие действия для обработки возможных проблем.
  • 27. Необрабатываемые искл.  Необрабатываемые исключения, это ошибки программы, которые при правильном кодировании возникать не должны (например, java.lang.IndexOfBoundException, java.lang.ArifmeticException возникают соответственно при указании индекса выходящего за границы массива и при делении на ноль).  Поэтому, чтобы не загромождать программу, компилятор разрешает не обрабатывать с помощью блоков try{} catch() исключения этого типа
  • 28. Ошибки (error)  Исключения,порожденные от Error, так же не являются обрабатываемыми. Эти ошибки предназначены для того что бы уведомить программу о возникновении сбоев которые программным способом устранить сложно, или невозможно вообще. В качестве примера можно привести StackOverflowError, OutOfMemoryError
  • 30. Создание собственных классов исключений public class ServerTimedOutException extends Exception { private int port; public ServerTimedOutException( String message, int port) { super( message ); this.port = port; } public int getPort() { return port; } }
  • 31. Д/З  Изучить презентацию  Изучить доп.материал (лекция № 15 курса Программирование на Java)  запустить демо-программу  добавить в неѐ работу с массивом, кот. вызывает выход за его границу (например, в методе создаѐтся массив из 10 элементов, а пользователь должен ввести № элемента, значение кот. он хочет увидеть на экране). Использовать ArrayOutOfBoundException