Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Блок finally

Типы исключений | Что происходит без обработки исключений | Использование операторов try и catch | Демонстрация множественных catch-операторов. | Вложенные операторы try | Оператор throw | Как использовать исключительные ситуации |


Читайте также:
  1. Finally

Когда исключение возникает, выполнение метода имеет не­ровный, нелинейный путь, который изменяет нормальное прохождение по­тока через метод. В зависимости от того, как кодирован метод, исключение может вызвать даже преждевременный выход из него. В некоторых случаях это могло бы стать причиной ошибки. Например, если метод открывает файл для ввода и за­крывает его для вывода, то вы вряд ли захотите, чтобы закрывающий файл код был обойден механизмом обработки исключений. Для реализации этой возможности и предназначено ключевое слово finally.

finally определяет блок кода, выполняющийся после того, как блок try/catch завершился и перед кодом, следующим за блоком try/catch. Блок finally будет выполняться независимо от того, было ли выброшено исклю­чение или нет. Если исключение было выброшено, конструкции блока finally будут обрабатываться, даже если нет catch- оператора, соответст­вующего исключению. Предложение finally необязательно. Однако каждый оператор try требует по крайней мере одного предложения catch или finally.

Например:

 

// Демонстрирует finally.

class FinallyDemo {

// Выход из метода через исключение.

static void procA() {

try {

System. out. println("Внутри procA");

throw new RuntimeException("demo");

} finally {

System. out. println("finally для procA ");

}

}

// Возврат изнутри try-блока

static void procB() {

try {

System. out. println("Внутри procB");

return;

} finally {

System. out. println("finally для procB ");

}

}

// Нормальное выполнение try-блока.

static void procC() {

try {

System. out. println("Внутри procC");

} finally {

System. out. println("finally procC");

}

}

public static void main(String args[]) {

try {

procA ();

} catch (Exception e) {

System. out. println("Исключение вброшено"); }

procB ();

procC ();

}

}

В этом примере, procA() преждевременно выходит из блока try, выбрасывая исключение. Перед самым выходом выполняется предложение finally. Оператор try метода рrосB() выходит с помощью оператора return. Здесь finally запускается перед возвратом из рrосB(). В методе рrосC() оператор try выполняется нормально, без ошибки. Однако блок finally все же реализуется.

Вывод, сгенерированный предшествующей программой:

Внутри рrосА

finally для рrосА

Исключение выброшено

Внутри рrосВ

finally для рrосВ

Внутри рrосС

finally для рrосС

 

Подклассы исключений

 

Исключение Значение
ArithmeticException Арифметическая ошибка типа деления на нуль
ArraylndexOutOfBoundsException Индекс массива находится вне границ
ArrayStoreException Назначение элементу массива несовмести­мого типа
ClassCastException Недопустимое приведение типов
IllegalArgirnentException При вызове метода использован незакон­ный аргумент
IllegalMonitorStateException Незаконная операция монитора, типа ожи­дания на разблокированном потоке
IllegalStateException Среда или приложение находятся в некор­ректном состоянии
IllegalThreadStateException Требуемая операция не совместима с теку­щим состоянием потока
IndexOutOfBoundsException Некоторый тип индекса находится вне границ
NegativeArraySizeException Массив создавался с отрицательным раз­мером
NullPointerException Недопустимое использование нулевой ссылки
NumberFormatException Недопустимое преобразование строки в чис­ловой формат
SecurityException Попытка нарушить защиту
StringIndexOutOfBoundsException Попытка индексировать вне границ строки
OnsupportedOperationE'xception Встретилась неподдерживаемая операция

 

Исключение Значение
ClassNotFoundException Класс не найден
CloneNotSupportedException Попытка клонировать объект, который не реализу­ет интерфейс Cloneable
IllegalAccessException Доступ к классу отклонен
InstantiationException Попытка создавать объект абстрактного класса или интерфейса
InterruptedException Один поток был прерван другим потоком
NoSuchFieldException Требуемое поле не существует
NoSuchMethodException Требуемый метод не существует

 


Дата добавления: 2015-07-19; просмотров: 44 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Методы с ключевым словом throws| Создание собственных подклассов исключений

mybiblioteka.su - 2015-2024 год. (0.008 сек.)