В этой статье мы рассмотрим все возможные комбинации try-catch-finally, которые могут произойти всякий раз, когда возникает исключение, и как происходит поток управления в каждом из указанных случаев.
- Поток управления в предложении try-catch ИЛИ в предложении try-catch-finally
- Случай 1: Исключение происходит в блоке try и обрабатывается в блоке catch
- Случай 2: исключение происходит в блоке try, не обрабатывается в блоке catch
- Случай 3: исключение не происходит в блоке try
- предложение попробуй наконец
- Случай 1: Исключение происходит в блоке try
- Случай 2: исключение не происходит в блоке try
Управление потоком в try-catch ИЛИ try-catch-finally
- Исключение происходит в блоке try и обрабатывается в блоке catch: если оператор в блоке try вызвал исключение, то остальная часть блока try не выполняется, и управление переходит к соответствующему блоку catch. После выполнения блока catch управление будет переведено в блок finally (если имеется), а затем будет выполнена остальная программа.
- Контроль потока в try-catch:
// Java-программа для демонстрации
// управление потоком предложения try-catch
// когда происходит исключение в блоке try
// и обрабатывается в блоке catch
class
GFG
{
public
static
void
main (String[] args)
{
// массив размером 4.
int
[] arr =
new
int
[
4
];
try
{
int
i = arr[
4
];
// этот оператор никогда не будет выполнен
// как исключение вызвано приведенным выше утверждением
System.out.println(
"Inside try block"
);
}
catch
(ArrayIndexOutOfBoundsException ex)
{
System.out.println(
"Exception caught in Catch block"
);
}
// программа отдыха будет выполнена
System.out.println(
"Outside try-catch clause"
);
}
}
Выход:
Exception caught in Catch block Outside try-catch clause
- Поток управления в предложении try-catch-finally:
// Java-программа для демонстрации
// управление потоком предложения try-catch-finally
// когда происходит исключение в блоке try
// и обрабатывается в блоке catch
class
GFG
{
public
static
void
main (String[] args)
{
// массив размером 4.
int
[] arr =
new
int
[
4
];
try
{
int
i = arr[
4
];
// этот оператор никогда не будет выполнен
// как исключение вызвано приведенным выше утверждением
System.out.println(
"Inside try block"
);
}
catch
(ArrayIndexOutOfBoundsException ex)
{
System.out.println(
"Exception caught in catch block"
);
}
finally
{
System.out.println(
"finally block executed"
);
}
// программа отдыха будет выполнена
System.out.println(
"Outside try-catch-finally clause"
);
}
}
Выход:
Exception caught in catch block finally block executed Outside try-catch-finally clause
- Контроль потока в try-catch:
- Исключительная ситуация в try-блоке не обрабатывается в блоке catch: в этом случае используется механизм обработки по умолчанию. Если блок finally присутствует, он будет выполнен с последующим механизмом обработки по умолчанию.
- предложение try-catch:
// Java-программа для демонстрации
// управление потоком предложения try-catch
// когда происходит исключение в блоке try
// но не обрабатывается в блоке catch
class
GFG
{
public
static
void
main (String[] args)
{
// массив размером 4.
int
[] arr =
new
int
[
4
];
try
{
int
i = arr[
4
];
// этот оператор никогда не будет выполнен
// как исключение вызвано приведенным выше утверждением
System.out.println(
"Inside try block"
);
}
// не подходящий обработчик
catch
(NullPointerException ex)
{
System.out.println(
"Exception has been caught"
);
}
// программа отдыха не будет выполнена
System.out.println(
"Outside try-catch clause"
);
}
}
Ошибка выполнения:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4 at GFG.main(GFG.java:12)
- предложение try-catch-finally:
// Java-программа для демонстрации
// управление потоком предложения try-catch-finally
// когда происходит исключение в блоке try
// но не обрабатывается в блоке catch
class
GFG
{
public
static
void
main (String[] args)
{
// массив размером 4.
int
[] arr =
new
int
[
4
];
try
{
int
i = arr[
4
];
// этот оператор никогда не будет выполнен
// как исключение вызвано приведенным выше утверждением
System.out.println(
"Inside try block"
);
}
// не подходящий обработчик
catch
(NullPointerException ex)
{
System.out.println(
"Exception has been caught"
);
}
finally
{
System.out.println(
"finally block executed"
);
}
// программа отдыха не будет выполнена
System.out.println(
"Outside try-catch-finally clause"
);
}
}
Выход :
finally block executed
Ошибка выполнения:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4 at GFG.main(GFG.java:12)
- предложение try-catch:
- Исключение не возникает в блоке try: в этом случае блок catch никогда не запускается, поскольку он предназначен только для запуска при возникновении исключения. Блок finally (если имеется) будет выполнен с последующей остальной частью программы.
- предложение try-catch:
// Java-программа для демонстрации try-catch
// когда исключение не произошло в блоке try
class
GFG
{
public
static
void
main (String[] args)
{
try
{
String str =
"123"
;
int
num = Integer.parseInt(str);
// этот оператор выполнится
// поскольку никакое исключение не вызывается приведенным выше утверждением
System.out.println(
"Inside try block"
);
}
catch
(NumberFormatException ex)
{
System.out.println(
"catch block executed..."
);
}
System.out.println(
"Outside try-catch clause"
);
}
}
Выход :
Inside try block Outside try-catch clause
- предложение try-catch-finally
// Java-программа для демонстрации try-catch-finally
// когда исключение не произошло в блоке try
class
GFG
{
public
static
void
main (String[] args)
{
try
{
String str =
"123"
;
int
num = Integer.parseInt(str);
// этот оператор выполнится
// поскольку никакое исключение не вызывается приведенным выше утверждением
System.out.println(
"try block fully executed"
);
}
catch
(NumberFormatException ex)
{
System.out.println(
"catch block executed..."
);
}
finally
{
System.out.println(
"finally block executed"
);
}
System.out.println(
"Outside try-catch-finally clause"
);
}
}
Выход :
try block fully executed finally block executed Outside try-catch clause
- предложение try-catch:
Контроль потока в try-finally
В этом случае, независимо от того, произойдет ли исключение в блоке try или нет, в конечном итоге всегда будет выполняться. Но поток управления будет зависеть от того, произошло ли исключение в блоке try или нет.
- Возникло исключение: если в блоке try возникла исключительная ситуация, поток управления будет, наконец, блоком, за которым следует механизм обработки исключений по умолчанию.
// Java-программа для демонстрации
// управление потоком предложения try-finally
// когда происходит исключение в блоке try
class
GFG
{
public
static
void
main (String[] args)
{
// массив размером 4.
int
[] arr =
new
int
[
4
];
try
{
int
i = arr[
4
];
// этот оператор никогда не будет выполнен
// как исключение вызвано приведенным выше утверждением
System.out.println(
"Inside try block"
);
}
finally
{
System.out.println(
"finally block executed"
);
}
// программа отдыха не будет выполнена
System.out.println(
"Outside try-finally clause"
);
}
}
Выход :
finally block executed Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4 at GFG.main(GFG.java:11)
- Исключение не вызывается: если исключение не возникает в блоке try, поток управления будет, наконец, блоком, за которым следует остальная часть программы.
// Java-программа для демонстрации
// управление потоком предложения try-finally
// когда исключение не происходит в блоке try
class
GFG
{
public
static
void
main (String[] args)
{
try
{
String str =
"123"
;
int
num = Integer.parseInt(str);
// этот оператор выполнится
// поскольку никакое исключение не вызывается приведенным выше утверждением
System.out.println(
"Inside try block"
);
}
finally
{
System.out.println(
"finally block executed"
);
}
// программа отдыха будет выполнена
System.out.println(
"Outside try-finally clause"
);
}
}
Output : Inside try block finally block executed Outside try-finally clause
Статьи по Теме:
Эта статья предоставлена Гауравом Миглани . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- Статический поток управления в Java
- финал, финал и финализация на Java
- Пробуй, лови, кидай и кидай в Java
- Вывод программ Java | Комплект 41 (попробуй-поймай)
- Использование throw, catch и instanceof для обработки исключений в Java
- Блок Catch и преобразование типов в C ++
- Циклы и операторы управления (продолжить, разбить и пройти) в Python
- Java.util.LinkedList.poll (), pollFirst (), pollLast () с примерами на Java
- Java.util.LinkedList.offer (), offerFirst (), offerLast () в Java
- Java.util.function.IntPredicate интерфейс в Java с примерами
- Java.util.function.LongPredicate интерфейс в Java с примерами
- Java.util.LinkedList.peek (), peekfirst (), peeklast () в Java
- Java.util.Collections.rotate () Метод в Java с примерами
- Класс Java.util.concurrent.RecursiveTask в Java с примерами
- Java.lang.Short toString () метод в Java с примерами
0.00 (0%) 0 votes